gpt4 book ai didi

c - 指针增量如何工作

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:08 26 4
gpt4 key购买 nike

int main(void)
{
int n1 = 2, n2 = 5;
int *p = &n1, *q = &n2;
*p = *(q++);
printf("%d,%d", *p, *q);
return 0;
}

输出= 5,5

为什么 *q 的值是 5 它应该有一些垃圾值?

主要内容(无效)

{

int n1 = 2, n2 = 5;

int *p = &n1, *q = &n2;

*p = *(++q);

printf("%d,%d", *p, *q);

return 0;

}

输出= 2,2

这是怎么发生的?谁能解释优先规则在指针中是如何工作的?

最佳答案

*p = *(q++);(或多或少)等同于 *p = *q; q++;,所以 p 没问题。 q++ 将被评估,产生 q 的旧值(即值预递增)。您所看到的是预期的行为。

虽然 printf 调用中 q 的引用确实有未定义的行为,因为 q 不再指向你拥有的内存观点。一百万种不同的事情可能会导致这种情况(例如,上次分配内存时,可能有 5,编译器太好了,试图帮助你,等等),但你不能也不应该依赖于这种行为。这样做很危险,而且这个程序可能会在许多编译器/操作系统/硬件上崩溃或输出无意义的内容。

关于c - 指针增量如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427913/

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