带你学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:} 为什么小甲鱼说第二段代码中*(p+1) = array,而在第一段代码中*(p+1) =array
??? 第二段代码他定义的是一个数组指针,*(p+1)=&array;而第一段代码定义的是一个指针,*(p+1)=array;一个是地址,一个是数组元素的值。 人造人 发表于 2020-2-2 18:12
???
打错了 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的话就对了 Mamma 发表于 2020-2-4 18:27
那这两段代码打印出来的都应该为4(数组第5个)吧?
第二段代码解释的:p + 1 便是指向整个数组最后的 ...
我上机测试这两段代码,结果都是4{:10_249:} 都等于4,第二段代码他定义的是一个数组指针,*(p+1)=&array;而第一段代码定义的是一个指针,*(p+1)=array,我第一遍打错了
段黄鱼 发表于 2020-2-5 08:57
我上机测试这两段代码,结果都是4
好 谢谢 我竟然忘了上机测试{:10_266:}
页:
[1]