gpt4 book ai didi

c - 预递增的字符指针在递增后都指向相同的地址?

转载 作者:行者123 更新时间:2023-11-30 19:48:19 24 4
gpt4 key购买 nike

我的问题是为什么第二个 printf 显示所有相同的地址,但第四个显示不同的数字?我在 intel 上的 gcc 4.8.2 下编译它,在某些 Linux 发行版上编译为 64 位。

前 2 个 pritfs 应该打印内存地址(不计算第一个数字,即第一行中的 int 值。

第二个和第三个从第一个和第二个 printfs 的指针给出的内存位置打印 char 值。

以下代码

#include<stdio.h>

int main()
{
char *ptr;
int numer;

numer = 0xAABBCCDD;
ptr=&numer;

printf("---\n%x\n %x %x %x %x\n",
numer,
(ptr),
(ptr++),
(ptr++),
(ptr++)
);
ptr=&numer;


printf("---\n%x\n %x %x %x %x\n",
numer,
(++ptr),
(++ptr),
(++ptr),
(ptr)
);

ptr=&numer;

printf("---\n%x\n %x %x %x %x\n",
numer,
*(ptr),
*(ptr++),
*(ptr++),
*(ptr++)
);
ptr=&numer;


printf("---\n%x\n %x %x %x %x\n",
numer,
*(++ptr),
*(++ptr),
*(++ptr),
*(ptr)
);


return 0;
}

产生输出:

/a.out                                                                                                                         
---
aabbccdd
53209c77 53209c76 53209c75 53209c74
---
aabbccdd
53209c77 53209c77 53209c77 53209c77
---
aabbccdd
ffffffaa ffffffbb ffffffcc ffffffdd
---
aabbccdd
ffffffaa ffffffbb ffffffcc ffffffdd

最佳答案

你需要了解sequence points 。这是 c 语义的一部分,描述更改何时对用户“可见”。

关于c - 预递增的字符指针在递增后都指向相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607693/

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