优秀的编程知识分享平台

网站首页 > 技术文章 正文

const float (*a)[3] ? 这是个啥,劝退神器?

nanyue 2024-10-04 18:25:03 技术文章 38 ℃

C语言的设计者还给我们准备了难以理解的另一种参数数组定义格式,以便让我们知难而退。

float average2(const float (*a)[3], const unsigned int n){
    ...
    return fSum / (n*3);
}

知识产权协议

允许以教育/培训为目的向学生或受众进行免费引用,展示或者讲述,无须取得作者同意。

不允许以电子/纸质出版为目的进行摘抄或改编。

形参中的const float (*a)[3]可以按照如下方式理解:

  • a是一个指针;
  • a所指向的对象为包含3个const float的一维数组。

如果把a视为数组名,则数组的元素也是数组,每个元素数组包含3个const float。换言之,a事实上是列数为3的二维数组。

上述形参a定义中的括号是必须的,如果去掉括号成为const float* a[3],编译器会做出完全不同的解读:

  • a是一个包含3个元素的数组;
  • 数组的元素类型为指向const float的指针,即const float*。

考虑到const float (*a)[3]这种形式的二维数组形参太具有迷惑性,作者建议总是使用const float a[][3]这种语法。如果读者实在不能理解const float (*a)[3]这种语法形式,不必沮丧,作者的感受跟读者一样。


本案例节选自作者编写的教材及配套实验指导书。

《C++编程基础及应用》(高等教育出版社,出版过程中)

《Python编程基础及应用》,高等教育出版社

《Python编程基础及应用实验教程》,高等教育出版社

高校教师同行如果期望索取样书,教学支持资料,加群,请私信作者,联系时请提供学校及个人姓名为盼,各高校在读学生勿扰为谢。

青少年读者们如果期望系统性地学习Python及C/C++程序设计语言,欢迎尝试下述今日头条(西瓜)免费视频课程。

C/C++从入门到放弃(重庆大学现场版)

Python编程基础及应用(重庆大学现场版)

Tags:

最近发表
标签列表