以下程序中两个printf
函数的输出之间的区别是什么。两者的输出应该相同还是不相同?
#include<stdio.h>
#include<string.h>
int main() {
int *p;
printf("%p",&p);
printf("\n%p",p);
return 0;
}
答案 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
的地址,但不太有用。