我爱橙 发表于 2022-3-5 18:49:38

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

请问是给的答案错了吗

大马强 发表于 2022-3-6 00:47:36

我有点不知道你说的答案是啥意思
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:41:57

本帖最后由 我爱橙 于 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,

所以想知道是答案错了还是我理解错了

大马强 发表于 2022-3-6 19:59:46

你理解错了,答案是对的
页: [1]
查看完整版本: NO.27 EX11.11 输出数组指针