日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

發(fā)布時(shí)間:2025/6/17 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、結(jié)構(gòu)體 數(shù)組 作為函數(shù)參數(shù) ( 數(shù)組 在 堆內(nèi)存創(chuàng)建 )
  • 二、完整代碼示例





一、結(jié)構(gòu)體 數(shù)組 作為函數(shù)參數(shù) ( 數(shù)組 在 堆內(nèi)存創(chuàng)建 )



在上一篇博客 【C 語言】結(jié)構(gòu)體 ( 結(jié)構(gòu)體 數(shù)組 作為函數(shù)參數(shù) | 數(shù)組 在 棧內(nèi)存創(chuàng)建 ) 的基礎(chǔ)上 , 將 棧內(nèi)存 中的 結(jié)構(gòu)體數(shù)組 , 更改為 堆內(nèi)存 中創(chuàng)建結(jié)構(gòu)體數(shù)組 ;

在堆內(nèi)存中 , 創(chuàng)建 結(jié)構(gòu)體數(shù)組 : 傳入 二級(jí)指針 , 該指針 指向 結(jié)構(gòu)體 指針 , 傳入 二級(jí)指針 的目的是 , 可以在函數(shù)中 , 通過形參 間接賦值 , 達(dá)到返回創(chuàng)建堆內(nèi)存的目的 ;

/*** @brief create_student 堆內(nèi)存中分配內(nèi)存* @param array 二級(jí)指針 , 指向結(jié)構(gòu)體數(shù)組* @return*/ int create_student(Student **array, int count) {// 返回值int ret = 0;// 臨時(shí)變量Student *tmp = NULL;// 驗(yàn)證二級(jí)指針合法性if(array == NULL){ret = -1;return ret;}// 堆內(nèi)存中申請(qǐng)內(nèi)存tmp = (Student *)malloc(sizeof(Student) * count);// 通過間接賦值 設(shè)置返回值*array = tmp;return ret; }

釋放堆內(nèi)存中的 結(jié)構(gòu)體 數(shù)組 : 傳入的參數(shù)是 二級(jí)指針 , 通過該 二級(jí)指針 指向 結(jié)構(gòu)體一級(jí)指針 , 將 結(jié)構(gòu)體指針 置空 ;

/*** @brief free_student 釋放內(nèi)存* @param array* @return*/ int free_student(Student **array) {// 返回值int ret = 0;// 驗(yàn)證二級(jí)指針合法性if(array == NULL){ret = -1;return ret;}// 釋放內(nèi)存free(*array);// 指針置空 , 防止野指針*array = NULL;return ret; }



二、完整代碼示例



完整代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>/*** @brief The Student struct* 定義 結(jié)構(gòu)體 數(shù)據(jù)類型 , 同時(shí)為該結(jié)構(gòu)體類型聲明 別名* 可以直接使用 別名 結(jié)構(gòu)體變量名 聲明結(jié)構(gòu)體類型變量* 不需要在前面添加 struct 關(guān)鍵字*/ typedef struct Student {char name[5];int age;int id; }Student;/*** @brief printf_struct_array 打印結(jié)構(gòu)體數(shù)組* @param array 數(shù)組作為函數(shù)參數(shù)退化為指針* @param count 數(shù)組中的元素個(gè)數(shù)*/ void printf_struct_array(Student *array, int count) {// 循環(huán)控制變量int i = 0;// 驗(yàn)證數(shù)組合法性if(array == NULL){return;}// 打印結(jié)構(gòu)體數(shù)組中的 結(jié)構(gòu)體 age 字段for(i = 0; i < count; i++){printf("Student age = %d\n", array[i].age);} }/*** @brief sort_struct_array 對(duì)結(jié)構(gòu)體數(shù)組 按照年齡進(jìn)行排序* @param array 結(jié)構(gòu)體指針* @param count 結(jié)構(gòu)體數(shù)組的元素個(gè)數(shù)*/ void sort_struct_array(Student *array, int count) {// 循環(huán)控制變量int i = 0, j = 0;// 學(xué)生年齡Student tmp;// 驗(yàn)證數(shù)組合法性if(array == NULL){return;}// 排序for(i = 0; i < count; i++){for(j = i + 1; j < count; j++){if(array[i].age > array[j].age){tmp = array[i];array[i] = array[j];array[j] = tmp;}}} }/*** @brief create_student 堆內(nèi)存中分配內(nèi)存* @param array 二級(jí)指針 , 指向結(jié)構(gòu)體數(shù)組* @return*/ int create_student(Student **array, int count) {// 返回值int ret = 0;// 臨時(shí)變量Student *tmp = NULL;// 驗(yàn)證二級(jí)指針合法性if(array == NULL){ret = -1;return ret;}// 堆內(nèi)存中申請(qǐng)內(nèi)存tmp = (Student *)malloc(sizeof(Student) * count);// 通過間接賦值 設(shè)置返回值*array = tmp;return ret; }/*** @brief free_student 釋放內(nèi)存* @param array* @return*/ int free_student(Student **array) {// 返回值int ret = 0;// 驗(yàn)證二級(jí)指針合法性if(array == NULL){ret = -1;return ret;}// 釋放內(nèi)存free(*array);// 指針置空 , 防止野指針*array = NULL;return ret; }/*** @brief 主函數(shù)入口* @return*/ int main(int argc, char* argv[], char**env) {// 聲明結(jié)構(gòu)體數(shù)組 , 該數(shù)組在棧內(nèi)存中Student *array = NULL;// 循環(huán)控制變量int i = 0;// 堆內(nèi)存中為結(jié)構(gòu)體指針分配內(nèi)存create_student(&array, 3);// 命令行中 , 接收輸入的年齡for(i = 0; i < 3; i++){printf("\n Input Age :\n");// 命令換行中 接收 輸入的年齡 ,// 設(shè)置到 Student 數(shù)組元素的 age 成員中scanf("%d", &(array[i].age));}// 結(jié)構(gòu)體數(shù)組 按照 age 排序sort_struct_array(array, 3);// 打印結(jié)構(gòu)體數(shù)組中的 結(jié)構(gòu)體 age 字段printf_struct_array(array, 3);// 釋放堆內(nèi)存數(shù)據(jù)free_student(&array);// 命令行不要退出system("pause");return 0; }

執(zhí)行結(jié)果 :

Input Age : 12Input Age : 11Input Age : 14 Student age = 11 Student age = 12 Student age = 14 請(qǐng)按任意鍵繼續(xù). . .

總結(jié)

以上是生活随笔為你收集整理的【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。