C语言 什么是int*(*asex)[5];?

jdzmm42g  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(139)

因为我找不到任何能解释int(*p)[5];的阅读,所以我决定在这里问一个问题,这个问题也可以作为其他用户使用时的参考,因为我觉得它有点混乱。int*(*asex)[5];到底是什么?
我是自学成才的,但我也从来没有在各种不同的课程中看到过它的解释,我也从来没有在实践中使用过它。现在,我需要一个明确的解释,因为我正在为我的项目创建一个C代码分析器。即使它没有直接向我解释,我已经习惯了语言语义,所以这里是我认为它的意思:

  • int(*a)[5];一个指向5个整型数组的指针(指针指向int[5]
  • int(**asex)[5];指针指向一个包含5个int指针的数组?
  • int(*arr[10])[10];应该是指向int[10]的10个指针的数组
  • int*(*asex)[5];这是什么?指针指向int[5]的指针?

我错了什么?另外,我觉得这唯一真实的的优点是用指针算术显示出来的,是真的吗?

tvmytwxo

tvmytwxo1#

阅读这些定义有一个窍门:螺旋法。
1.从标识符开始:变量定义的变量名、typedef的类型名以及匿名类型(如强制类型转换)的最内层*
1.从左到右解析后缀运算符(对于数组为[],对于函数为()),如果到达),则跳到下一个规则
1.然后从右到左解析前缀运算符,*表示指向
1.当您到达(时,跳回到步骤2以取得括号中的运算式。
1.如果到达最后一个类型停止。
将此应用于示例:

  • int(*a)[5];定义了一个指向5个整型数组的指针。通常,该类型由一个函数接收,该函数接受一个定义为int mat[4][5]的矩阵;
  • int(**asex)[5];定义了一个指向5个int数组的指针。上面定义的函数参数的地址类型。
  • int(*arr[10])[10];定义了一个由10个指针组成的数组,指向由10个int组成的数组。可以存储10个指针,指向具有10列和不同行数的矩阵。
  • 最后,int*(*asex)[5];定义了一个指向int的5个指针数组的指针。

下面是最后一个示例的详细步骤:
int*(*asex)[5]中,从asex开始,asex是一个,向右看,命中),从asex重新开始,向左看,*读作指针指向,命中(,从)重新开始,向右看,[5]读作数组5,点击;,从(重新开始,向左看,*发音为指针指向int,发音为最后一个类型**int**。
因此有这样一句话:* asex是指向int * 的5个指针数组的指针。

相关问题