NO.27 EX11.11 输出数组指针
本帖最后由 我爱橙 于 2022-6-10 16:37 编辑若有int a[]={{1,2},{3,4}}; 则*(a+1),*(*a+1)的含义分别为.
A.非法,2
B.&a,2 //√,*(a+1)其实等价于a,意思是第二行行地址,*(*a+1)等价于a,也就是2
C.&a,3
D.a,4
#include <stdio.h>
#include <math.h>
int main()
{
int a[]={{1,2},{3,4}};
printf("%d\n%d\n",*(a+1),*(*(a+1)));
return 0;
}
运行结果是
6487576
3
但原题给的答案是&a,2
而不是我认为的 &a,3
请问是给的答案错了吗
我有点不知道你说的答案是啥意思
a是一个二维的数组,a是a[]的首地址,而(a+1)表示的是a的地址的指针,*(a+1)取得是a的地址,要想取值就要在加一层取值符【*】
可以用这个代码来验证
#include <stdio.h>
#include <string.h>
int main()
{
int a[]={{1,2},{3,4}};
printf("a的地址是%d\n",*(a+1));
printf("a的首地址是%d",a);
return 0;
}
a的地址是6487576
a的首地址是6487568
6487576 - 6487568 = 8,a和a隔了a和a,两个整型一个占8个字节,证毕
本帖最后由 我爱橙 于 2022-3-6 17:45 编辑
大马强 发表于 2022-3-6 00:47
我有点不知道你说的答案是啥意思
a是一个二维的数组,a是a[]的首地址,而(a+1)表示的是a的地址的 ...
原题是int a[][]={{1,2},{3,4}};
因为运行不了所以改成int a[]={{1,2},{3,4}};
程序运行结果是
6487576
3
原题答案给的是*(a+1)含义为&a,
*(*(a+1))含义为2,
但我认为*(a+1)含义为&a,
*(*(a+1))含义为3,
所以想知道是答案错了还是我理解错了 你理解错了,答案是对的
页:
[1]