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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )

發布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、二級指針
  • 二、完整代碼示例





一、二級指針



指針 作為 函數輸入 : 調用者 負責 分配內存 ;

指針 作為 函數輸出 : 函數 負責 分配內存 , 一般 傳入二級指針 , 函數負責生成內存 , 并 使用 二級指針 指向 一級指針, 一級指針 指向 在 函數中 分配好內存 ;


如果要在 函數中 分配內存 , 則 需要 傳入二級指針 , 在函數內部調用 malloc 函數 , 分配內存 , 返回一個 一級指針 變量 ;

令 二級指針 形參 指向 該 一級指針變量 , 即可通過間接賦值 返回相關結果 ;

代碼示例如下 :

/** 生成 2 個字符串, 然后返回*/ int get_str(char **str1, int *len1, char **str2, int *len2) {char *s1 = NULL;char *s2 = NULL;// I . 生成第一個字符串s1 = (char *)malloc(64);// 判斷內存分配是否成功if(s1 == NULL){return -1;}// 向內存空間寫入值strcpy(s1, "abcd");// 計算字符串大小*len1 = strlen(s1);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str1 = s1;// II . 生成第一個字符串s2 = (char *)malloc(64);// 判斷內存分配是否成功if(s2 == NULL){return -2;}// 向內存空間寫入值strcpy(s2, "1234");// 計算字符串大小*len2 = strlen(s2);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str2 = s2;return 0; }

二級指針 最終 指向的內存釋放 : 釋放二級指針 指向的 一級指針 指向的內存的地址 , 釋放后 將指針指向的地址置空 ;

/** 釋放字符串內存*/ int free_str(char **str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放二級指針 指向的 一級指針 指向的內存的地址// 釋放指針free(*str);// 將指針指向的地址置空*str = NULL;return 0; }

一級指針 指向的內存釋放 : 釋放一級指針 指向的內存的地址 , 釋放后 無法 將指針指向的地址置空 ;

/** 釋放字符串內存* 傳入 一級指針 , 只能釋放一級指針指向的內存* 不能 講一級指針 置空*/ int free_str2(char *str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放一級指針free(str);return 0; }



二、完整代碼示例



完整代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>/** 生成 2 個字符串, 然后返回*/ int get_str(char **str1, int *len1, char **str2, int *len2) {char *s1 = NULL;char *s2 = NULL;// I . 生成第一個字符串s1 = (char *)malloc(64);// 判斷內存分配是否成功if(s1 == NULL){return -1;}// 向內存空間寫入值strcpy(s1, "abcd");// 計算字符串大小*len1 = strlen(s1);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str1 = s1;// II . 生成第一個字符串s2 = (char *)malloc(64);// 判斷內存分配是否成功if(s2 == NULL){return -2;}// 向內存空間寫入值strcpy(s2, "1234");// 計算字符串大小*len2 = strlen(s2);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str2 = s2;return 0; }/** 釋放字符串內存*/ int free_str(char **str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放二級指針 指向的 一級指針 指向的內存的地址// 釋放指針free(*str);// 將指針指向的地址置空*str = NULL;return 0; }/** 釋放字符串內存* 傳入 一級指針 , 只能釋放一級指針指向的內存* 不能 講一級指針 置空*/ int free_str2(char *str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放一級指針free(str);return 0; }int main() {// 第一個字符串char *str1 = NULL;// 第一個字符串字符個數int len1 = 0;// 第二個字符串char *str2 = NULL;// 第二個字符串字符個數int len2 = 0;// 函數調用的返回值int ret = 0;// 調用函數 , 傳入二級指針ret = get_str(&str1, &len1, &str2, &len2);// 打印函數中生成的字符串printf("str1 = %s, str2 = %s\n", str1, str2);// 釋放字符串指針指向的內存 , 傳入二級指針free_str(&str1);// 釋放字符串指針指向的內存 , 傳入一級指針free_str2(str2);// 命令行不要退出system("pause");return 0; }

執行結果 :

總結

以上是生活随笔為你收集整理的【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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