gpt4 book ai didi

c - 为什么对于指针 *p,p[0] 是存储在 p 的地址而 p[1] 是 p 本身的地址?

转载 作者:行者123 更新时间:2023-12-05 08:45:40 25 4
gpt4 key购买 nike

代码

int n = 25;  
int *p = &n;
printf("%x\n %d\n %x\n", p, p[0], p[1]);

返回:

\<adress-of-p  
25
\<adress-of-p>

当然我永远不会这样做,但在 K&R 中声明

"if pa is a pointer, expressions may use it with a subscript; pa[i] is identical to *(pa+i).

所以我很好奇。

最佳答案

这个声明

printf("%x\n %d\n %x\n", p, p[0], p[1]);

由于两个原因调用未定义的行为。

第一个是要输出指针,您应该使用正确的转换说明符。第二个是你不能取消引用像这样的 p[1] 没有指向有效对象的指针。

相反,你可以这样写

printf("%p\n %d\n %p\n", ( void * )p, p[0], ( void * )( p + 1 ) );

关于c - 为什么对于指针 *p,p[0] 是存储在 p 的地址而 p[1] 是 p 本身的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71931236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com