首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针的指针

指针的指针
EN

Stack Overflow用户
提问于 2012-11-26 07:58:01
回答 1查看 194关注 0票数 4

我正在尝试使用c指针,无法解释以下代码:

代码语言:javascript
复制
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);
}

输出如下:

代码语言:javascript
复制
ptr = 0xbf9d64a0 
&ptr = 0xbf9d64a4
address of int ** = 0xbf9d6490
address of int *** = 0xbf9d6490
address of int **** = 0xbf9d6490

我的疑问是,为什么要使用(address(int)) == address(address(address(int)))

非常感谢你的澄清。

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

Recursive pointers

但作者明确表示它们是相等的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 08:00:15

代码语言:javascript
复制
void printAddr(int **num)
{
   printf("address of int ** = %p\n",(void *)&num);
}

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

如果要在main中查看指针的地址,则应直接在main中打印它们或使用函数

代码语言:javascript
复制
void printAddress(void* p) {
    printf("%p\n", p);
}

并使用以下命令调用

代码语言:javascript
复制
printAddress(&ptr3);

等。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13556925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档