gpt4 book ai didi

c - 指针的指针指针

转载 作者:太空狗 更新时间:2023-10-29 15:29:58 25 4
gpt4 key购买 nike

我在摸索c指针,无法解释下面的代码:

int main()
{
int i = -3;
int *ptr;
int **ptr2;
int ***ptr3;
ptr = &i;
ptr2 = &ptr;
ptr3 = &ptr2;
printf("ptr = %p\n",(void *)ptr);
printf("&ptr = %p\n",(void *)&ptr);
printAddr(&ptr);
printAddr2(&ptr2);
printAddr3(&ptr3);
return 0;
}

void printAddr(int **num)
{
printf("address of int ** = %p\n", (void *)&num);
}

void printAddr2(int ***num)
{
printf("address of int *** = %p\n", (void *)&num);
}
void printAddr3(int ****num)
{
printf("address of int **** = %p\n", (void *)&num);
}

输出如下:

ptr = 0xbf9d64a0 
&ptr = 0xbf9d64a4
address of int ** = 0xbf9d6490
address of int *** = 0xbf9d6490
address of int **** = 0xbf9d6490

我的疑问是为什么要地址 (address(int)) == address(address(address(int)))

非常感谢您的澄清。

我发现这个问题是相关的:

Recursive pointers

但作者明确指定它们是相等的。

最佳答案

void printAddr(int **num)
{
printf("address of int ** = %p\n",(void *)&num);
}

打印出函数接收到的传入值副本的地址。这些函数很可能都分配在堆栈的同一个位置,因为所有这些函数只接受一个参数,并且调用之间不会发生分配。

如果你想在 main 中看到指针的地址,你应该直接在 main 中打印它们或者有一个函数

void printAddress(void* p) {
printf("%p\n", p);
}

并调用它

printAddress(&ptr3);

等等

关于c - 指针的指针指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com