| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 我爱橙 于 2022-6-10 16:37 编辑  
 
若有int a[][2]={{1,2},{3,4}}; 则*(a+1),*(*a+1)的含义分别为. 
 
 
A.非法,2 
 
 
B.&a[1][0],2         //√,*(a+1)其实等价于a[1],意思是第二行行地址,*(*a+1)等价于a[0][1],也就是2 
 
 
C.&a[0][1],3 
 
 
D.a[0][0],4 
 
 
 
- #include <stdio.h>
 
 - #include <math.h>
 
  
- int main()
 
 - {
 
 -       int a[][2]={{1,2},{3,4}};
 
 -       
 
 -         
 
 -        printf("%d\n%d\n",*(a+1),*(*(a+1)));
 
 -        
 
  
-         return 0;
 
 - }
 
  复制代码 
 
运行结果是 
6487576 
3 
 
但原题给的答案是&a[1][0],2 
而不是我认为的   &a[0][1],3 
 
请问是给的答案错了吗 
我有点不知道你说的答案是啥意思 
a是一个二维的数组,a是a[][2]的首地址,而(a+1)表示的是a[1][0]的地址的指针,*(a+1)取得是a[1][0]的地址,要想取值就要在加一层取值符【*】 
可以用这个代码来验证
 - #include <stdio.h>
 
 - #include <string.h>
 
  
- int main()
 
 - {
 
 -         int a[][2]={{1,2},{3,4}};
 
 -     
 
 -         printf("a[1][0]的地址是%d\n",*(a+1));
 
 -         printf("a的首地址是%d",a);
 
 -         return 0;
 
 - }
 
  复制代码a[1][0]的地址是6487576 
a的首地址是6487568 
6487576 - 6487568 = 8,a[0][0]和a[1][0]隔了a[0][0]和a[0][1],两个整型一个占8个字节,证毕
  
 
 
 |   
 
 
 
 |