C语言使用typedef时二维数组工作原理及相关习题咨询
C语言typedef作用于二维数组的原理解答
基础原理
C语言里的二维数组本质是「数组的数组」,比如int arr[4][6]的含义是:定义一个长度为4的数组,它的每一个元素都是长度为6的int类型数组。
typedef和二维数组结合的常用写法有两类:
- 定义数组类型:
typedef int Row[M];之后Row matrix[N];就等价于直接写int matrix[N][M],这里的Row就是「长度为M的一维int数组」的类型别名 - 定义数组指针类型:
typedef int (*pRow)[M];这里的pRow是「指向长度为M的一维int数组的指针」的别名,这类写法常用来做二维数组的函数传参,也可以用来动态申请二维数组空间
习题答案验证
你的直觉是对的,对应N×M(行×列)矩阵的选项C是正确答案。
原理很简单:这类习题里选项C的标准写法通常是typedef int (*MatType)[M]; MatType mat[N];,这里的MatType是指向一行M个int元素的指针,声明长度为N的MatType数组,就刚好对应N行、每行M个元素的二维矩阵,访问时可以直接用mat[i][j]读取第i行第j列的元素,和原生二维数组的访问逻辑完全一致。
易混点提示:注意区分数组指针和指针数组:
int *p[5]是指针数组,每个元素都是int类型的指针,总共有5个元素;int (*p)[5]才是数组指针,p本身是一个指针,指向的对象是长度为5的int数组,括号改变了运算符的优先级,让*先和p结合确定它的指针属性。
内容的提问来源于stack exchange,提问作者Satan Lucifer
相关产品推荐
相关产品推荐

