一个C语言的奇怪问题!

来源:百度知道 编辑:UC知道 时间:2024/05/18 02:07:04
代码:
main()
{
int a=2;
int *p;
*p=&a;
printf("%d",*p);
}
将其中printf("%d",*p)换为printf("%d,%d",*p,&a);为什么*p显示的值不一样?
5楼那为同志谢了哈,但是我在从新调试这个程序的时候两个输出又是正确的了,我怀疑会不会是编译器的问题?有次我在printf("%d",a);a是int型的时候,竟然输出的不是a的值,而是%d,我问过老师,他也没弄懂是怎么回事,最后还是说可能是编译器的问题,C的编译器就那么容易出现问题么?
大家都说这个赋值有问题,但是这是书上的一道题,我也很少见到这种赋值,这种*p=&a; 有什么意义???

main()
{
int a=2;
int *p;
*p=&a;
printf("%d",*p);
}

将地址值赋值给int型,本来是可以输出的,而且*p和&a应该是同一个值(我想ls的都只拘泥于p=&a了),不过你这里错在没有为指针p分配空间,所以*p = &a赋值不成立,*p应该是随机的。
定义p的这一句应该改为
int *p = (int*)malloc(sizeof(int));
还有最后用完别忘了
free(p);
我试过了,*p 和&a是一样的。

P.S.你要把地址值赋值给整型的话,最好用长整型,int太短了。


*p 输出的是地址,也就是下标
*P =&a 是把 a的地址给 *p

指针是不会存储值的 他存储的是变量的地址

*p输出的时a的值,即2
&a输出的时a的地址

printf使用的格式为printf(" ",[要输出的变量的地址或直接就是常量] );
所以你要输出a的值应该把参数写成"&a"或"p",写"*p"是把这个指针指向的地址输出。

main()
{
int a=2;
int *p;
p=&a; /* 注意这里要改过来 */
printf("%d",*p);
}

注意*是一个重载的运算符,在不同的地方有不同的意义,如果是在声明指针变量的时候,*就表示后面的量(本题中的p)是一个指针型变量。而在其他时候则是间接取值,即*p就表示p所指向的内存中的存储的值。所以,本题中,或者写p=&a;或者写*p=a;理论上来说就都没问题了