【发布时间】:2015-01-09 02:31:18
【问题描述】:
我一直在尝试使用指针,但遇到了这个问题。 在这段代码中.. p,h 是两个指针......我已经等同于 *p = &i , h = &j ;并打印值 我的期望是 *p 将包含地址, p 将具有指向 i 的地址,在 h 的情况下, h 将具有地址, *h 将 o/p 的值 j。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i =10;
int *p = &i;
int j =30;
int *h;
h = &j;
printf("Hello world!\n %d , %d \n" , *p , p);
printf("Hello world!\n %d , %d \n" , *h , h);
return 20;
}
但是我的o/p在p和i的情况下是相反的..为什么会这样..编译器如何 区分 b/w 这两种语句 .... *p = &i ;和 *p = i;
o/p是这样的
Hello World!
10 , 2359060
Hello World!
30, 2359056
如果问题标题有误,我很抱歉.. 我不知道如何描述这种情况.. 任何类似问题的链接将不胜感激
【问题讨论】:
-
p不是int-->printf("%d\n" , p);不是好的代码。最好使用printf("%p\n" , p);。最好使用printf("%d\n" , (void *) p); -
在大多数健全的硬件上没有区别。事实上,在将指针填充到
varargs之前,将指针投射到void *并没有任何作用。您可以争辩说"%p"以更易读的方式打印它,当然,但教科书警告在现实世界中意义不大。