关于指针的问题
没看懂第六行加个int*有什么用,不是本来就是指向整形的指针了吗?#include <stdio.h>
int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p = (int *)(&array + 1);
printf("%d\n", *(p - 6));
return 0;
} 本帖最后由 风车呼呼呼 于 2022-5-10 19:10 编辑
看岔了,楼下正解 不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)
地址的值是一样,但是类型不一样
一个是 int *,另一个是 int (*)
你需要这篇文章
C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768
人造人 发表于 2022-5-10 19:13
你需要这篇文章
C语言复杂声明解析
讲真...感觉自己水平不够这篇文章没看懂 人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)
{:10_266:}这个也没能读懂,还是没看出 int(*)的作用 本帖最后由 1613551 于 2022-5-11 16:07 编辑
人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)
{:10_266:}感谢大佬抽空解答等我学到后面再回过头来看 我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指针),这样写的话,int *p = (int *)(&array + 1),就等于p是指向array + 1也就是int array这个地址吗 为什么一个是array一个是array,但是都是4,不是从0开始算吗?array=0 array=1 array=2 array=3 array=4 那应该array=5啊?
#include <stdio.h>
int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *p = (int *)(&array + 1);
printf("%d\n", *(p - 6));
return 0;
}
#include <stdio.h>
int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = &array;
printf("%d\n", *(*(p+1)-6));
return 0;
} 救命,我可能陷入了循环 1613551 发表于 2022-5-11 16:07
我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指 ...
array有10个元素,索引是0~9
&array + 1 是指向 array,不是 array
人造人 发表于 2022-5-11 16:20
array有10个元素,索引是0~9
&array + 1 是指向 array,不是 array
不是,我array的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最后一位+1也就是array+1,所以是array 1613551 发表于 2022-5-11 16:22
不是,我array的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最 ...
???
什么?
array这个数组有几个元素?
10个吧?
array 是最后一个元素吧?
所以,变量p是指向 array 的,有问题吗?
人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?
{:10_254:}不好意思看错了 人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?
{:10_254:}那大佬可以解释一下9楼的问题吗 人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?
那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话 1613551 发表于 2022-5-11 16:31
那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话
对,答案的确是写错了
人造人 发表于 2022-5-11 16:36
对,答案的确是写错了
{:10_266:}好的
页:
[1]