指针的定义问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:44:07
void main()
{
long int a;
long int *p;
a=34;
p=&a;
printf("%ld,%ld,%ld,%ld\n",a,p,&a,*p);
}输出的值是34,-4259906,34,2229295完全和我想的不一样,为什么阿!我看别的程序输出指针能用%ld啊!
我用的是turbo c ,vista系统,我想输出应该是34,x,y,34
x和y的值应该相等.
能不能定义long int *p,还有*p和p能用%ld输出吧,一楼和三楼说的截然相反我都晕了?@.@?,请各位多多帮忙,拜谢!!!
那就像四楼说的那样输出的是a的地址转换成的十进制的数
那输出的两个数也应改相等吧,还有用%d,%ld,%x输出这几个值又有什么联系呢?用%ld输出的数远大于用%d输出的数,而用%x输出的真正地址又是怎模转化成十进制呢?怎模也转不成%d和%ld这两个数吧?

值是相等了,但b,c的值与他们的十六进制的地址有联系吗?
辛苦你了!!!!!

你以为会输出什么?printf("%ld,%ld,%ld,%ld\n",a,p,&a,*p);如要p 输出的是地址,printf里要用%p。,&a这也一样。
用%ld格式输出地址是不确定的值

指针是能用%ld的(比如最后一个*p)但是你要输出的是p的值,它里面放的是a的地址.所以输出的是a的地址转换成的十进制的数
想要输出p的地址那应该这样写
printf("%ld,%x,%x,%ld\n",a,p,&a,*p);
这样就可以输出了.
//"%x" 是输出十六进制的数的.内存里地址都是用十六进制表示的//
//定义long int *p//*p是个指针它前面定义的类型是它里面的地址指向的类型.与输出p的值没有关系.p 的值是地址地址是没有什么类型的.
那是系统的问题了如果一定要用ld来表示的话那就强制一下可以这样
:void main()
{
long int a,b,c;
long int *p;
a=34;
p=&a;
b=(long int)p;
c=(long int)&a;
printf("\n%ld,%ld,%ld,%ld\n",a,b,c,*p);
}
不然的话就像系统会出垃圾数据一样.
我觉得二楼说的有道理.
我也是个刚学C的呵呵..:-)

没有关系只是一个数值而已...呵呵
我也才学C一个月而已,呵呵,交个朋友,相互学习学习.:-)

你想的是什么?

你用的编译器是什么?

你用的操作系统是什么?

#include<stdio.h>
void main()
{
long int a;
long int *p;
a=34;
p=&a;
printf("%ld,%ld,%ld,%ld\