使用&显示指针变量的地址操作者

时间:2014-10-07 04:33:45

标签: c pointers

以下程序中两个printf函数的输出之间的区别是什么。两者的输出应该相同还是不相同?

    #include<stdio.h>
    #include<string.h>
    int main() {
      int *p;
      printf("%p",&p);
      printf("\n%p",p);
      return 0;
    }

4 个答案:

答案 0 :(得分:1)

  • &p - 指针的地址
  • p - 指针
  • 的地址指针
  • *p - 地址指针内的内容指针

答案 1 :(得分:1)

这里指针p被声明但未初始化,因此指向未知的内存位置。程序应该给出编译错误。但是,如果使用间接运算符(*),它将为您提供与p相关的内存位置的值(在本例中为Garbbage Value)。 &安培;运算符用于查找与变量关联的地址。

计划中的建议修改:

int main() {
   int *p;
   printf("%u",*p);
   printf("\n%u",p);
   return 0;
}

输出:

一些随机值(垃圾值)

p的内存位置

答案 2 :(得分:0)

第一个输出当前堆栈帧中变量的地址。

第二个输出未初始化的值;你应该打开你的编译器警告,直到它抱怨。

答案 3 :(得分:0)

它们不一样。

  • printf("%p", p);将打印p的值,即它指向的int的地址。 (尽管如此,在您的示例中,您并未将其初始化以指向任何特定内容。)

  • printf("%p", &p);会打印p的地址,但不太有用。