解释以下 C 代码片段的输出?

问题描述 投票:0回答:1

我无法弄清楚为什么这段代码会给出这样的输出。请有人指导一下。

#include<stdio.h>

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

    for (int i = 0; i < 5; i++) {
        printf("%d", *(*p + i));
    }
}

解释此代码的输出。

arrays c pointers pointer-arithmetic
1个回答
1
投票

好老C。 间接级别是混合的。

p
是一个指向 2 个整数数组的指针。
a
是一个指向 2 个整数数组的指针。

因此,在 printf 语句中,您试图打印出一个指针,而不是它指向的内容。

此外,当您只有 4 个值时,您正尝试打印 5 个值。 最后你可能想声明

int main()

而不是已弃用的

无效主函数()

试试这个:

#include <stdio.h>

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

    for (int i = 0; i < 4; i++) {
        printf("%d ", *(*p + i));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.