这些 Pointer 语句有何不同 *p = &i , h = &j?

How does these Pointer statements differ *p = &i , h = &j?

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

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

我非常接受第二种定义,因为它是定义指针​​的正确方法。你看,你应该定义 header,并且 然后给它赋值指向的变量,没有*.

此声明

int *p = &i;

意思是:

int *p;
p = &i;

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

*p = &i

相同

声明

int *p = &i; 

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

int *p;
p = &i;

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

如果 i 是一个包含 10 的变量,并且您将 p 定义为包含 i 地址的 int *,那么您的语句意味着:

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

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

int* p = &i;

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