gpt4 book ai didi

c - 关于C中的指针运算

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

我正在尝试打印指针在 C 中保存的地址。我会使用 %d 或 %p 作为格式说明符吗?所有的指针地址都是整数吗?在这个 youtube 视频中,我认为是这种情况,但是当我尝试编写一些代码时,除非我使用 %p,否则它不会编译。另外,因为 int 是 4 个字节,所以 i_ptr+1 不应该是 i_ptr 保存的内存地址 + 4 吗? https://www.youtube.com/watch?v=JTttg85xsbo

谢谢!!!!

#include <stdio.h>

void test(int *i_ptr);
int main() {
int i[5];
test(i);
return 0;
}

void test(int *i_ptr) {
printf("%d\n", i_ptr);
printf("%d\n", i_ptr + 1);
}

~

最佳答案

如果您有支持 C99 的编译器,则可以使用类型 uintptr_t 来保存指针的值。但是,由于编译器未指定其大小,并且此类类型没有 printf 说明符,因此您必须尝试使用​​ "%d""%ld""%lld" 使事情正常进行。我想强调它不是可移植代码

以下代码对我有用,在 64 位 Linux 机器上使用 gcc 4.8.2 和 -std=c99

#include <stdio.h>
#include <stdint.h>

void test(int *i_ptr);

int main() {
int i[5];
test(i);
return 0;
}

void test(int *i_ptr) {
uintptr_t p = (uintptr_t)i_ptr;
printf("%ld\n", p);
p = (uintptr_t)(i_ptr+1);
printf("%ld\n", p);
}

示例运行的输出如下。

140735074589984
140735074589988

更新

格式说明符“%td”旨在用于ptrdiff_t。它更有可能也适用于 uintptr_t

关于c - 关于C中的指针运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25861018/

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