数组指针
#include <stdio.h>int main()
{
int temp = {1, 2, 3, 4, 5};
int (*p2);
p2=&temp;
int i;
for (i = 0; i < 5; i++)
{
printf("%d\n", *(*p2 + i));
}
return 0;
}
、
p2=&temp;这行表示p2中保存了数组temp地址的地址(或者是数组首元素的地址的地址,我感觉都是一样的)
在视频的最后结尾处把p2=&temp这行的&符号去掉,运行时虽然有警告但是依然得到了正确答案,这一处我没搞明白,如果加上&,表示把temp的地址(temp代表着数组首元素的地址)也就是地址的地址赋值给p2
,那么下面printf里面的**p很好解释;但是去掉&就变成了p2=temp,这不就变成了向p2里面塞了temp这个地址,*p就可以表示数组temp的元素,那么此时为什么需要**p才能正确输出呢? 可以看下我写的{:5_105:}
https://fishc.com.cn/thread-200275-1-1.html 因为int (*p2),是指向数组名的指针,虽然他跟int *p=temp的结果是一样,但是层次不一样,是指向地址的指针,算是指向指针的指针
&temp要用数组指针类型定义,int (*p) = &temp;temp要用普通指针定义,int*p = temp
虽然temp跟&temp 的值是一样的,但是意义却不同,所以要用*p抵消&
打印的时候也就要需要两层解引用。
希望能帮助到你。 阿曼达卡格纳德 发表于 2021-9-25 08:18
因为int (*p2),是指向数组名的指针,虽然他跟int *p=temp的结果是一样,但是层次不一样,是指向地址的指 ...
如果说int (*p)=&temp把&去掉的话是算语法错误吗?
编译器在看到有数组指针的时候无论&temp有没有&都会当作地址的地址,然后再给出警告
这个解释对不对
bszs 发表于 2021-9-25 19:03
如果说int (*p)=&temp把&去掉的话是算语法错误吗?
编译器在看到有数组指针的时候无论&temp有没有&都 ...
对啊 类型不同
&temp是 指向整个数组
temp是指向元素类型的指针 万千只cnm 发表于 2021-9-25 19:35
可以看下我写的
https://fishc.com.cn/thread-200275-1-1.html
感谢大佬 开卷有益,多多益善····
页:
[1]