You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:06:02