0

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

但是在 p 和 i 的情况下我的 o/p 是相反的.. 为什么会这样.. 编译器如何区分这两种语句 .... *p = &i ; 和 *p = i;

o/p是这样的

Hello World!
10 , 2359060
Hello World!
30, 2359056

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

4

5 回答 5

2

该声明

int *p = &i; 

声明p为指向 int 的指针,并用 i 的地址对其进行初始化。这就像写作

int *p;
p = &i;

在这些语句之后,p包含 的地址i*p的值i。正如 John Kugelman 指出的,使用%p格式说明符来打印指针。

于 2015-01-09T02:36:43.667 回答
1

这个说法

int *p = &i;

这意味着:

int *p;
p = &i;

p定义为整数指针 ( int *),然后为其赋值&i(整数变量的地址i)。

一样*p = &i

于 2015-01-09T02:36:30.680 回答
1

为了减少混淆,您可以使用:

int* p = &i;

然后,您可以始终牢记 p 指的是地址,而 *p 指的是值

于 2015-01-09T02:46:00.037 回答
0

我高度接受第二个定义,因为它是定义指针​​的正确方法。你看,你应该定义标题, 然后将它分配给指向的变量,没有*.

于 2015-01-09T02:35:34.427 回答
-1

如果i是一个变量 holding 10,并且您将的地址定义p为持有,那么您的陈述意味着:int *i

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
于 2015-01-09T02:38:10.123 回答