为什么C程序在打印指针时会给我这个输出?

时间:2015-08-14 12:24:09

标签: c pointers printf

#include <stdio.h>

int main()

{
    int i;
    int buf[10];
    char *p ;
    p = 4;
    printf("%d",p);
    return 0;
}

输出:

  

4

怎么会是4?我期待一些地址价值。能帮助我理解吗?

1 个答案:

答案 0 :(得分:5)

这是未定义的行为,因为%d需要一个整数。

你看到这个输出的原因是指针有足够的容量来存储小整数,例如4.如果巧合,系统上的指针大小与整数的大小相匹配,printf会找到一个它期望在它所期望的位置的表示,因此它将打印指针的数值。

打印指针的正确方法是使用%p格式说明符和强制转换:

printf("%p", (void*)p);
  

我期待一些地址价值。

如果您已为p分配了某个地址,则会获得地址值。例如,如果你这样做

char buf[10];
char *p = &buf[3];
printf("%p", (void*)p);

你会在索引3看到buf元素的地址。

Demo.