如何在C语言中无指针创建含4个2x2矩阵的静态数组?
不用指针实现4个2x2矩阵的静态数组
当然可以完全不用指针实现!你遇到的编译错误是因为数组声明的语法顺序搞错了。
在C语言里,多维数组的声明规则是先写最外层的维度,再依次向内。你写的int[2][2] tmp[4]不符合C的语法规范,正确的写法应该是:
int tmp[4][2][2];
这个声明的含义是:创建一个名为tmp的静态数组,它包含4个元素,每个元素都是一个2x2的int类型二维数组——完全满足你的需求,而且全程没有用到指针。
示例代码(包含初始化和访问)
#include <stdio.h> int main() { // 声明同时初始化4个2x2矩阵 int tmp[4][2][2] = { {{1, 2}, {3, 4}}, // 第1个矩阵 {{5, 6}, {7, 8}}, // 第2个矩阵 {{9, 10}, {11, 12}}, // 第3个矩阵 {{13, 14}, {15, 16}} // 第4个矩阵 }; // 访问第0个矩阵的(0,1)位置元素 printf("第1个矩阵的第一行第二列:%d\n", tmp[0][0][1]); // 访问第2个矩阵的(1,0)位置元素 printf("第3个矩阵的第二行第一列:%d\n", tmp[2][1][0]); return 0; }
为什么原来的写法会报错?
C语言的数组声明语法要求类型在前,然后是数组名和各维度的方括号。你试图把int[2][2]当作一个“矩阵类型”来使用,这在标准C里是不允许的(除非你用typedef自定义类型,不过那也没必要)。调整维度顺序后,编译器就能正确识别这是一个三维静态数组了。
如果想用更直观的“矩阵类型”写法,也可以先typedef一个2x2矩阵的类型,再声明数组:
typedef int Matrix2x2[2][2]; Matrix2x2 tmp[4]; // 这样写也能通过编译,本质和上面的写法完全一致
这个写法同样不需要指针,只是用typedef简化了声明,你可以根据自己的习惯选择。
内容的提问来源于stack exchange,提问作者Antonio1996
相关产品推荐
相关产品推荐

