我一直在尝试使用指针,我遇到了这个问题。 在这段代码中.. 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 =&amp; i;和* p = i;
o / p就像这样Hello World!
10 , 2359060
Hello World!
30, 2359056
如果问题标题错了,我很抱歉..我不知道如何描述这种情况.. 任何类似问题的链接将不胜感激
答案 0 :(得分:2)
声明
int *p = &i;
将p
声明为指向int的指针,并使用i的地址对其进行初始化。这就像写作
int *p;
p = &i;
在这些陈述之后,p
包含i
的地址,*p
包含i
的值。
正如John Kugelman指出的那样,使用%p
格式说明符来打印指针。
答案 1 :(得分:1)
本声明
int *p = &i;
意思是:
int *p;
p = &i;
p
被定义为整数指针(int *
),然后为其赋值&i
(整数变量i
的地址)。
与*p = &i
答案 2 :(得分:0)
我高度接受第二个定义,因为它是定义指针的正确方法。你看,你应该定义标题,和
然后将变量分配给指向,而不是*
。
答案 3 :(得分:0)
为了减少困惑,你可以使用:
int* p = &i;
然后,您始终可以记住,p表示地址,* p表示值
答案 4 :(得分:-1)
如果i
是一个持有10
的变量,并且您将p
定义为int *
,其地址为i
,那么您的陈述意味着:< / p>
printf("Hello world!\n %d , %d \n" ,
*p , // value inside p, ie value of i, 10
p); // value OF p, which is the address of i