gpt4 book ai didi

c - 以连贯的方式打印 (int *) 类型的指针

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

我在 C 中有这段代码:

int tab[10] = {3, 10, 5, 7, 9, 4, 9, 4, 6, 8, 0};
printf("(int*)&tab[0]=%p (int*)&tab[1]=%p (int*)&tab[1]-(int*)&tab[0]=%d\n", (int*)&tab[0], (int*)&tab[1], ((int*)&tab[1]) - ((int*)&tab[0]));

它返回:

(int*)&tab[0]=0xbf9775c0 (int*)&tab[1]=0xbf9775c4 (int*)&tab[1]-(int*)&tab[0]=1

我不明白的是,为什么最后返回的差异是 1 而不是 4。谁能告诉我一种以连贯的方式为 (int *) 打印它们(地址及其差异)的方法?

最佳答案

因为你在做指针运算。指针运算总是以指针指向的任何单位为单位进行(在本例中为 4,因为 sizeof(int) == 4 在您的系统上)。

如果你想知道原始地址的差异,那么要么将减法的结果乘以 sizeof(int),要么将指针转换为之前的 char *做减法。

关于c - 以连贯的方式打印 (int *) 类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967403/

25 4 0
文章推荐: c++ - arm-eabi-addr2line 不显示行号
文章推荐: css - 有什么方法可以检查解决方案中某处是否引用了 css 文件? Visual Studio
文章推荐: html - 定价表 :
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com