这些指针语句如何不同* p =& i,h =& j?

时间:2015-01-09 02:31:19

标签: c pointers addressof

我一直在尝试使用指针,我遇到了这个问题。 在这段代码中.. 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

如果问题标题错了,我很抱歉..我不知道如何描述这种情况.. 任何类似问题的链接将不胜感激

5 个答案:

答案 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