|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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个字节,证毕
|
|