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