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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

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

發(fā)布時(shí)間:2025/6/17 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、二級(jí)指針
  • 二、完整代碼示例





一、二級(jí)指針



指針 作為 函數(shù)輸入 : 調(diào)用者 負(fù)責(zé) 分配內(nèi)存 ;

指針 作為 函數(shù)輸出 : 函數(shù) 負(fù)責(zé) 分配內(nèi)存 , 一般 傳入二級(jí)指針 , 函數(shù)負(fù)責(zé)生成內(nèi)存 , 并 使用 二級(jí)指針 指向 一級(jí)指針, 一級(jí)指針 指向 在 函數(shù)中 分配好內(nèi)存 ;


如果要在 函數(shù)中 分配內(nèi)存 , 則 需要 傳入二級(jí)指針 , 在函數(shù)內(nèi)部調(diào)用 malloc 函數(shù) , 分配內(nèi)存 , 返回一個(gè) 一級(jí)指針 變量 ;

令 二級(jí)指針 形參 指向 該 一級(jí)指針變量 , 即可通過(guò)間接賦值 返回相關(guān)結(jié)果 ;

代碼示例如下 :

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

二級(jí)指針 最終 指向的內(nèi)存釋放 : 釋放二級(jí)指針 指向的 一級(jí)指針 指向的內(nèi)存的地址 , 釋放后 將指針指向的地址置空 ;

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

一級(jí)指針 指向的內(nèi)存釋放 : 釋放一級(jí)指針 指向的內(nèi)存的地址 , 釋放后 無(wú)法 將指針指向的地址置空 ;

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



二、完整代碼示例



完整代碼示例 :

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

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

總結(jié)

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

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