c-将指针取消引用到带有一个星号的指针


#include <stdio.h>
int main(){
int integer = 300;
int* p = &integer;
int** pp = &p;
printf("*pp = %i", *pp);
}

我的问题是什么才是真正的pp?打印*p地址中的值意味着什么?

它是对转换为整数值的integer的引用。

要打印引用,应使用%p格式说明符,而不是%i格式说明符。

[pp] -> [p] -> [integer]

如果你修改程序,你可以看到引用以及它们是如何链接的:

int main()
{
int integer = 300;
int* p = &integer;
int** pp = &p;
printf("pp = %p *pp = %pn",(void *)pp, (void *)*pp);
printf("&integer = %p &p = %pn", (void *)&integer, (void *)&p);
}
pp =        0x7fffb6adc7d8 *pp =    0x7fffb6adc7e4
&integer =  0x7fffb6adc7e4 &p =     0x7fffb6adc7d8
#include <stdio.h>
int main(){
int integer = 300;
int* p = &integer;
int** pp = &p;
printf("**pp=%dn", **pp);
printf("*p=%dn", *p);
printf("*pp = %pn", *pp);
printf("p=%pn", p);
printf("&integer=%pn", &integer);
printf("&(*p)=%pn", &(*p));
printf("pp=%pn", pp);
printf("&p=%pn", &p);
}

由于&(*p)简单地是p,是的,*pp*p的地址
由于%i是整数,但您要打印的是指针。所以我把它改成了%p

我不是C编程专家,但我相信我对指针有相当的了解。所以,要理解什么是*pp,你需要理解*运算符的作用是什么?

毫无疑问,它用于乘法,但也用于指针去引用。

所以当我说*pp时,它意味着pp的值,即存储在pp中的值。C中每个定义的变量都有自己的内存空间。因此,*pp意味着存储在赋予变量pp的存储空间中的内容。

在您的情况下,

int integer = 300;

声明一个名为integer的整数类型变量,并给定值300

int* p = &integer;

需要指向一个整数变量的指针被声明,并被赋予integer的地址。

int** pp = &p;

声明一个需要指向整数变量的指针,并给出p的地址

printf("*pp = %i", *pp);

*pp表示打印存储在pp中的值,即p的地址**pp表示打印存储在p中的值中的值,即300

正如我之前所解释的,每个变量都有自己的内存空间,每个内存空间都会分配一个地址,这样它就可以被识别(我们有一个用于通过电子邮件联系我们的电子邮件地址或一个用于邮寄联系我们的邮政地址)。

希望这能回答你的问题。如果有的话,一定要问后续问题。干杯

相关内容

最新更新