关于C中的指针算术

时间:2014-09-16 05:05:51

标签: c pointers math printing

我试图打印指针在C中保存的地址。我会使用%d或%p作为格式说明符吗?所有指针地址都是整数?在这个YouTube视频中,我认为是这种情况,但是当我尝试编写某些内容时,除非我使用%p,否则无法编译。另外,isn< i_ptr + 1应该是i_ptr保持+ 4的内存地址,因为int是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);
}

1 个答案:

答案 0 :(得分:1)

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

以下代码对我有用,在带有"%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