日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

發布時間:2025/6/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、指針數組 和 二維數組 數據 拷貝到 自定義二級指針 中
    • 1、函數形參 設計規則
    • 2、三種內存模型 對應 函數形參 指針退化規則
  • 二、完整代碼示例





一、指針數組 和 二維數組 數據 拷貝到 自定義二級指針 中



指針數組二維數組 中的數據 拷貝到 自定義二級指針 內存模型中 , 并進行排序 ;


1、函數形參 設計規則


函數形參 設計規則 : 向 函數中 傳入 二級指針 , 如果只是 使用 該 二級指針 指向的數據 , 可以 直接傳入 二級指針 作為形參 ; 如果 需要 修改 二級指針 的指向 , 則需要 傳入 三級指針 ;


2、三種內存模型 對應 函數形參 指針退化規則


① 指針數組 : 指針數組 參數 , 外層是數組 , 內層是指針 , 外層數組 退化成 指針 , 整體退化成 二級指針 ;

// 指針數組char *p1[] = {"ab", "ef", "cd"};

退化為 :二級指針 ;

char **p1

② 二維數組 : 二維數組 , 最高維退化成 指針 , 整體退化成 數組指針 , 指向數組的指針 ;

// 二維數組char p2[3][5] = {"13", "35", "22"};

退化為 : 數組指針 ;

// 數組指針 char (*p2)[5]

③ 二維指針 : 二維指針 作為參數 不退化 ;

// 二級指針char **p3 = NULL;

退化為 :

// 二維指針 char **p3

代碼示例 :

/*** @brief copy_data 將 指針數組 和 二維數組 中的數據拷貝到 二維指針 中* @param p1 指針數組 參數 , 外層是數組 , 內層是指針 , 外層數組 退化成 指針 , 整體退化成 二級指針* @param count1 指針數組 中的 指針變量元素個數* @param p2 二維數組 , 最高維退化成 指針 , 整體退化成 數組指針 , 指向數組的指針* @param count2 二維數組的 一維數組 個數* @param newp 指向 二級指針 的 三級指針* @param count3p 指向一個數字的指針 , 該 數字是 二級指針 指向的 一級指針 個數* @return*/ int copy_data(char **p1, int count1, char (*p2)[5], int count2, char ***newp, int *count3p)



二、完整代碼示例



完整代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>/* 計算數組 array 大小 */ #define LENGTH(array) (sizeof(array)/sizeof(*array))/*** @brief copy_data 將 指針數組 和 二維數組 中的數據拷貝到 二維指針 中* @param p1 指針數組 參數 , 外層是數組 , 內層是指針 , 外層數組 退化成 指針 , 整體退化成 二級指針* @param count1 指針數組 中的 指針變量元素個數* @param p2 二維數組 , 最高維退化成 指針 , 整體退化成 數組指針 , 指向數組的指針* @param count2 二維數組的 一維數組 個數* @param newp 指向 二級指針 的 三級指針* @param count3p 指向一個數字的指針 , 該 數字是 二級指針 指向的 一級指針 個數* @return*/ int copy_data(char **p1, int count1, char (*p2)[5], int count2, char ***newp, int *count3p) {// 返回值int ret = 0;// 循環控制變量int i = 0, j = 0;// 臨時長度int len = 0;// 創建的新的 二級指針 , 用于存放 指針數組 二維指針 中的數據char **p3 = NULL;// 分配一塊內存 , 這塊內存中存放 count1 + count2 個一級指針p3 = (char **)malloc((count1 + count2) * sizeof(char *));// 驗證指針合法性if (p3 == NULL){ret = -1;return ret;}// 遍歷將 p1 指針數組 中的數據 拷貝到 二級指針 中for (i = 0; i < count1; i++){// 指針數組 中指針 指向的 字符串長度// 最后的 + 1 是加上 \0 字符len = strlen(p1[i]) + 1;// 為 指向字符串的 一級指針 在堆內存中分配內存p3[i] = (char *)malloc( len * sizeof(char)) ;// 如果堆內存分配失敗 , 直接退出if (p3[i] == NULL){return -2;}// 向堆內存中拷貝 字符串 數據strcpy(p3[i], p1[i]);}// 遍歷將 p2 二維數組 中的數據 拷貝到 二級指針 中// 之前已經拷貝了 count1 個 , 因此從第 count1 + 1 位置開始拷貝// 第 count1 + 1 個的索引從 0 開始 , 其索引是 count1 ;for (j = 0; j < count2; j++){// 計算 二維數組 中第 j 個一維數組 字符串長度// 最后的 + 1 是加上 \0 字符len = strlen(p2[j]) + 1;// 為 指向字符串的 一級指針 在堆內存中分配內存p3[count1 + j] = (char *)malloc(len * sizeof(char));// 堆內存分配失敗 , 退出if (p3[count1 + j] == NULL){return -3;}// 向堆內存中拷貝 字符串 數據strcpy(p3[count1 + j], p2[j]);}// p3 二維指針 中存儲的 字符串個數len = count1 + count2;// 指針 間接賦值 作為 返回值*count3p = len; // 二維指針 賦值給 三維指針形參 指向的內存地址*newp = p3; // 字符串個數 賦值return 0; }/*** @brief sort_data 二級指針 指向的 一級指針 數據排序* 需要修改 二級指針 指向的一級指針次序* 二級指針 不需要修改 , 因此這里傳入 二級指針即可* 如果需要修改 二級指針 , 則需要傳入 三級指針* @param p3 二級指針 數據* @param num3 二級指針 指向的 一級指針 個數* @return*/ int sort_data(char **p3, int len) {// 循環控制變量int i = 0, j = 0;// 交換 字符串 時的臨時變量char *p = NULL;// 驗證指針合法性if(p3 == NULL){return -1;}// p3 指向的 若干 字符串 之間的排序for (i = 0; i < len; i++){for (j = i + 1; j < len; j++){if ( strcmp(p3[i], p3[j]) > 0 ){// 交換 i, j 位置的 一級指針p = p3[i];p3[i] = p3[j];p3[j] = p;}}}return 0; }/*** @brief sort_data 二級指針 指向的 一級指針 數據排序* 需要修改 二級指針 指向的一級指針次序* 二級指針 不需要修改 , 因此這里傳入 二級指針即可* 如果需要修改 二級指針 , 則需要傳入 三級指針* @param p3 二級指針 數據* @param num3 二級指針 指向的 一級指針 個數* @return*/ int print_data(char **p3, int len) {// 循環控制變量int i = 0;// 交換 字符串 時的臨時變量char *p = NULL;// 驗證指針合法性if(p3 == NULL){return -1;}// p3 指向的 若干 字符串 之間的排序for (i = 0; i < len; i++){printf("%s\n", p3[i]);}return 0; }/*** @brief 主函數入口* @return*/ int main(int argc, char* argv[], char**env) {// 指針數組char *p1[] = {"ab", "ef", "cd"};// 二維數組char p2[3][5] = {"13", "35", "22"};// 二級指針char **p3 = NULL;// 存儲 p3 指向的一級指針個數int len3 = 0;// 將 指針數組 二維數組 數據 拷貝到 二級指針 中copy_data(p1, 3, p2, 3, &p3, &len3);// 拷貝之后的結果print_data(p3, len3);// 數據排序sort_data(p3, len3);// 打印排序之后的結果printf("\nSort :\n");print_data(p3, len3);// 命令行不要退出system("pause");return 0; }

執行結果 :

ab ef cd 13 35 22Sort : 13 22 35 ab cd ef 請按任意鍵繼續. . .

總結

以上是生活随笔為你收集整理的【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草免费在线视频 | 在线电影一区二区 | 久久久久久久久综合 | 九九久久视频 | 日韩一区二区三区在线看 | 亚洲色综合| 视频在线观看 | 久热热| 欧美午夜精品理论片 | 激情亚洲网 | www.久久av | 欧美成人短视频 | 久久久久久久伊人 | 国产女主播视频 | a在线播放| 日本wwwxx| 狠狠艹| 午夜影院18| 女人av在线 | 婷婷五月在线视频 | 欧美日韩国产精品综合 | avav亚洲| 亚洲天堂影院 | 久久99精品久久久久久三级 | 亚洲欧美激情在线观看 | 大陆一级黄色片 | 国产精品久久久久9999 | 黑鬼大战白妞高潮喷白浆 | 国产精品1区2区3区 在线看黄的网站 | 精品人妻伦九区久久aaa片 | 天天综合网久久综合网 | 亚洲欧美色图在线 | 日韩性在线 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 国产精品一线 | 久久尤物| 女人十八毛片嫩草av | 欧美少妇毛茸茸 | 亚洲熟妇中文字幕五十中出 | 夜色视频在线观看 | 欧美首页 | 久草aⅴ | 男人的天堂视频在线观看 | 影视先锋av资源 | 美女少妇av | 精品一区91 | 中国zzji女人高潮免费 | 亚洲熟女一区二区 | 婷婷久久亚洲 | 久久激情小说 | 成人欧美一区二区三区黑人冫 | 正在播放国产一区 | 欧美日韩国产精品成人 | 女同调教视频 | 久久综合九色 | 亚洲国产欧美在线观看 | 精品久久久久久久久久久久久 | 欧美精品久久久久久久久老牛影院 | 看特级黄色片 | julia一区| aaa一区二区 | 欧美不卡二区 | 日本一区二区免费电影 | 打屁屁日本xxxxx变态 | 色综合久久久久无码专区 | 青春草国产视频 | 亚洲中文字幕无码不卡电影 | 欧美日韩国产中文 | 亚州色图欧美色图| 国产一区精品视频 | 国产视频久久久久 | 色中色在线视频 | av导航网站 | 一级黄色片一级黄色片 | 99久久人妻无码精品系列 | 成人性生活视频 | 黄毛片在线观看 | 欧美三级影院 | 免费看操片 | 成人av一区二区三区 | 日韩伦理视频 | 日本熟妇一区二区三区四区 | 欧美性色黄大片手机版 | 4438x全国最大成人 | 香蕉av网站 | 欧美一区二区三区激情啪啪 | 日韩欧美区 | 西西4444www大胆无视频 | 色综合色综合网色综合 | 91成人福利视频 | 成年人免费网站在线观看 | 黄色网页大全 | 成年人在线观看网站 | 这里只有精品国产 | 夜夜嗨一区二区 | 91久久在线观看 | 国产馆视频 | 最近免费中文字幕大全免费版视频 | 欧美综合一区二区三区 |