Mamma 发表于 2020-2-2 18:00:46

带你学C课后作业S1E23的问题 困惑

本帖最后由 Mamma 于 2020-2-4 18:12 编辑

int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int *p = (int *)(&array + 1);

      printf("%d\n", *(p - 6));

int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int (*p) = &array;

      printf("%d\n", *(*(p+1)-6));
两个输出内容不应该是一样吗 为什么小甲鱼说第二段代码中*(p+1) = array,而在第一段代码中*(p+1) =array???{:5_107:}

人造人 发表于 2020-2-2 18:12:34

为什么小甲鱼说第二段代码中*(p+1) = array,而在第一段代码中*(p+1) =array

???

ll766441789 发表于 2020-2-4 15:03:17

第二段代码他定义的是一个数组指针,*(p+1)=&array;而第一段代码定义的是一个指针,*(p+1)=array;一个是地址,一个是数组元素的值。

Mamma 发表于 2020-2-4 18:20:01

人造人 发表于 2020-2-2 18:12
???

打错了

Mamma 发表于 2020-2-4 18:27:26

ll766441789 发表于 2020-2-4 15:03
第二段代码他定义的是一个数组指针,*(p+1)=&array;而第一段代码定义的是一个指针,*(p+1)=array

那这两段代码打印出来的都应该为4(数组第5个)吧?
第二段代码解释的:p + 1 便是指向整个数组最后的位置(第二个 array 数组的起始位置),于是 *(p+1) 即下一个数组 array 数组的起始位置,即 &array ,所以 *(*(p+1)-6) == array = array
&array我就理解为下一个数组的第二个   array不就是5了如果11 和5表示第11或第5的话就对了

段黄鱼 发表于 2020-2-5 08:57:24

Mamma 发表于 2020-2-4 18:27
那这两段代码打印出来的都应该为4(数组第5个)吧?
第二段代码解释的:p + 1 便是指向整个数组最后的 ...

我上机测试这两段代码,结果都是4{:10_249:}

ll766441789 发表于 2020-2-5 10:34:14

都等于4,第二段代码他定义的是一个数组指针,*(p+1)=&array;而第一段代码定义的是一个指针,*(p+1)=array,我第一遍打错了

Mamma 发表于 2020-2-11 19:34:58

段黄鱼 发表于 2020-2-5 08:57
我上机测试这两段代码,结果都是4

好 谢谢 我竟然忘了上机测试{:10_266:}
页: [1]
查看完整版本: 带你学C课后作业S1E23的问题 困惑