int (*number)[2] 返回一个 2D 数组还是一个包含 2 个元素的数组? C

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

我很困惑 if int (*number)[2];在 C 中返回 A) 一个多维数组,每个子数组包含 2 个元素或 B) 一个包含 2 个元素的数组?当我阅读之前的一些问题时,一致认为它返回一个包含 2 个元素的数组。然而,看看这个例子,答案似乎并非如此:

#include <stdio.h>

int main() {
    int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int (*number)[2]; 
    
    number = arr; 

    printf("First element: %d %d\n", (*number)[0], (*number)[1]); // prints "1 2"
    number++; 
    
    printf("Second element: %d %d\n", (*number)[0], (*number)[1]); // prints "3 4"

    return 0;
}

有人可以澄清这个案例并可能向我指出相关文件吗?非常感谢!

arrays c pointers multidimensional-array
1个回答
0
投票
int (*number)[2]; 

声明一个指向 2 个整数数组的指针。

int arr[3][2]

声明一个二维数组,其行是由2个整数组成的数组。

number = arr;

相当于

number = &arr[0];

(参见 什么是数组到指针的转换又名:衰减?)所以现在

number
指向
arr
的第一行。

number++
之后,指向
arr
的第二行。

© www.soinside.com 2019 - 2024. All rights reserved.