首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解C++中指向数组的双指针

理解C++中指向数组的双指针
EN

Stack Overflow用户
提问于 2021-03-30 11:28:24
回答 4查看 93关注 0票数 0

我已经学习C语言几个月了,我遇到了一个问题,如下所示。

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int a[2][2] = {{1,2}, {3,4}};
    int (**p)[2] = &a;

    for (int i=0; i<2; ++i) {
        for (int j=0; j<2; ++j) {
            printf("%d %u\n", a[i][j], (*(a+i) + j));
        }
    }

    for (int i=0; i<4; ++i) {
        printf("%d %u\n", *(*p + i), (*p + i));
    }

    printf("%u\n", p);
    printf("%u\n", p+1);
    printf("%u\n", p+2);
    printf("%u\n", p+3);
    printf("%u\n", *p);
    printf("%u\n", *p+1);
    printf("%u\n", *p+2);
    printf("%u\n", *p+3);
    puts("");
}

我在机器上得到的输出如下所示:

代码语言:javascript
复制
1 3751802992
2 3751802996
3 3751803000
4 3751803004
1 1
9 9
17 17
25 25
3751802992
3751803000
3751803008
3751803016
1
9
17
25

我知道输出的前四行,其中打印了2D数组的元素及其各自的地址,但我完全不知道其他输出是如何发生的。

我检查了一个在线IDE,在那里我也得到了相同的输出,除了明显不同的地址。我知道int (**p)2是一个(int *)2数据类型,它是a2不可比拟的指针类型。但是我仍然想知道p指针是如何工作的。

有没有人能告诉我这是怎么回事?我一直在热切地等待着了解代码输出背后的逻辑。对于长代码片段和长输出序列,我感到非常抱歉。提前谢谢。

注意:我知道代码产生了很多警告,但我想了解关于p的核心思想。

EN

Stack Overflow用户

发布于 2021-03-30 12:12:22

我引入了宏LEN来计算数组大小,而不是硬拷贝魔术数字,修复了p的声明,在打印有符号值时将无符号格式%u更改为有符号%d,最后一次循环,我确定您试图打印的第二件事是什么,所以省略了它,并且打印语句的最后一段是指针,因此在循环中使用%p而不是重复代码:

代码语言:javascript
复制
#include <stdio.h>

#define LEN(a) sizeof(a) / sizeof(*a)

int main() {
    int a[2][2] = {{1,2}, {3,4}};
    int (*p)[2] = a;

    for (int i=0; i < LEN(a); i++) {
        for (int j = 0; j < LEN(*a); j++) {
            printf("%d %d\n", a[i][j], *(*(a + i) + j));
        }
    }

    for (int i=0; i < LEN(a) * LEN(*a); i++) {
        printf("%d\n", *(*p + i));
    }

    for(int i = 0; i < LEN(a) * LEN(*a); i++) {
        printf("%p\n", p + i);
    }

    for(int i = 0; i < LEN(a) * LEN(*a); i++) {
        printf("%p\n", (void *) *(p + i));
    }

    puts("");
}
票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66864404

复制
相关文章

相似问题

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