小林c语言语,C语言 | 每日基础(35)

读者:当我向一个接受指针的指针的函数传入二维数组的时候, 编译器报错了。

阿一:数组蜕化为指针的规则不能递归应用。数组的数组 (即 C语言中的二维数组) 蜕化为数组的指针, 而不是指针的指针。数组指针常常令人困 惑, 需要小心对待。

如果你向函数传递二位数组:

int array[NROWS][NCOLUMNS]; f(array);

那么函数的声明必须匹配:

void f(int a[][NCOLUMNS]) { ... }

或者

void f(int (*ap)[NCOLUMNS]) /* ap 是个数组指针 */

{ ... }

在第一个声明中, 编译器进行了通常的从 “数组的数组” 到 “数组的指针” 的 隐式转换。第二种形式中的指针定义显而易见。因为被调函 数并不为数组分配地址, 所以它并不需要知道总的大小, 所以行数 NROWS 可以省略。

但数组的宽度依然重要, 所以列维度 NCOLUMNS (对于三维或多维数组, 相 关的维度) 必须保留。如果一个函数已经定义为接受指针的指针, 那么几乎可以肯定直接向它传入 二维数组毫无意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,定义结构体数组可以通过以下方式进行: 1. 先声明结构体类型,然后定义数组: ```c struct 结构体标识符{ 数据类型1 成员名1; ... 数据类型n 成员n; }; struct 结构体标识符 数组名\[数组长度\]; ``` 2. 定义结构体变量的同时定义结构体数组: ```c struct 结构体标识符{ 数据类型1 成员名1; ... 数据类型n 成员n; } 结构体标识符 数组名\[数组长度\]; ``` 3. 直接定义结构体数组: ```c struct 结构体标识符{ 数据类型1 成员名1; ... 数据类型n 成员n; } 数组名\[数组长度\]; ``` 4. 结构体数组的初始化可以通过以下两种方法进行: 方法1: ```c struct 结构体标识符{ 数据类型1 成员名1; ... 数据类型n 成员n; }; struct 结构体标识符 数组名\[数组长度\] = {初始列表}; ``` 方法2: ```c struct 结构体标识符{ 数据类型1 成员名1; ... 数据类型n 成员n; } 数组名\[数组长度\] = {初始列表}; ``` 在以上的定义和初始化方法中,结构体标识符代表结构体的名称,成员名1到成员n代表结构体的成员名称和数据类型。数组长度表示结构体数组的长度,初始列表表示每个结构体元素的初始值。 例如,下面的代码定义了一个名为array的结构体数组,其中包含了五个学生的姓名和成绩: ```c struct{ char *name; //姓名 float score; //成绩 } array\[\] = { {"张三", 145.0}, {"李四", 130.5}, {"王五", 148.5}, {"赵六", 139.0}, {"小林", 150.0} }; ``` 通过循环遍历结构体数组,可以计算出这五个学生的平均成绩。例如: ```c float sum = 0; for(int i = 0; i < 5; i++){ sum += array\[i\].score; } printf("平均成绩:%.2f\n", sum/5); ``` 这样就可以得到平均成绩。 #### 引用[.reference_title] - *1* [C语言 | 结构体数组](https://blog.csdn.net/weixin_48669767/article/details/116291224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C语言 结构体数组](https://blog.csdn.net/weixin_45020839/article/details/120224285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C语言结构体数组](https://blog.csdn.net/liubing8609/article/details/82624182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值