程序如下,为什么打印p时候值是不确定的?我知道正确的写法是 * p,但是我想知道
直接打印p为什么不报错,也没警告,但是值却不确定?
#include <stdio.h>
int main()
{
int a =8;
int *p = &a
printf("%d\n",p);
}
printf("%d\n",p) 代表指针p所指向的变量的地址值,所以不报错,你输出的是整型变量a的地址值,要想输出a的值必须为printf("%d\n,*p")。
p输出的是指针,每次分配的不同,所以不确定。输出指针(本身也是一个整数)和输出指针指向的值都是可以的。
因为p是指针,指向的是a的地址,你输出p其实是输出了a的地址,因为每次给它分配的地址不一样,所以每次运行值都会变。ps:int *p = &a 后面少了个;
p里面存的是a的地址,所以打印的是地址,因为程序运行时变量分配空间是随机的,所以地址就是随机的
打印地址最好用%p格式
每次运行程序,系统都会位程序重新分配内存,分配的内存不一定在同一个地方,所以显示的不一样,另外输出地址的话,最好用 %p 占位字符比较好
http://blog.jobbole.com/15837/
p中存储的是a的地址,也是一个数值,用printf输出自然是没有问题的!
p作为一个指针,本身也有值,不报错正常。
只是没有告诉输出函数输出什么。
p是指针,所以打印的是地址,程序运行时会分配这个地址,但是不是确定值,程序可以每次修改分配的地址。
指针本身也是一个整数,至于为什么不确定,是每次运行分配的内存不同。
&a表示是a的地址。而*p=&a,表示*p保存的是a的地址。而*p又指的是p这个地址里面的数据。
*p和&a这样的表示中 p和&a都是指地址。
把 printf("%d\n",p);改成 printf("%d\n,*p);*
因为你定义指针语句没加分号,而且用%d格式符打印地址按理来说是不对的
p作为一个指针,存放的是a的地址,a的地址可以用整数表达,所以%d,能输出,0 error ,0 warning。不确定是因为每次运行系统给a的空间位置是不确定的。
c编译器不会检测这类细节问题
printf("%d\n",p);
执行目标是:以整数形式输出指针p
printf("%d\n",*p);
执行目标是:以整数形式输出指针p指向的内容
指针变量名 地址(指针变量) 变量名 变量值
p 0x01010(随机分配) a 8