【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、二級指針
- 二、完整代碼示例
一、二級指針
指針 作為 函數(shù)輸入 : 調(diào)用者 負(fù)責(zé) 分配內(nèi)存 ;
指針 作為 函數(shù)輸出 : 函數(shù) 負(fù)責(zé) 分配內(nèi)存 , 一般 傳入二級指針 , 函數(shù)負(fù)責(zé)生成內(nèi)存 , 并 使用 二級指針 指向 一級指針, 一級指針 指向 在 函數(shù)中 分配好內(nèi)存 ;
如果要在 函數(shù)中 分配內(nèi)存 , 則 需要 傳入二級指針 , 在函數(shù)內(nèi)部調(diào)用 malloc 函數(shù) , 分配內(nèi)存 , 返回一個 一級指針 變量 ;
令 二級指針 形參 指向 該 一級指針變量 , 即可通過間接賦值 返回相關(guān)結(jié)果 ;
代碼示例如下 :
/** 生成 2 個字符串, 然后返回*/ int get_str(char **str1, int *len1, char **str2, int *len2) {char *s1 = NULL;char *s2 = NULL;// I . 生成第一個字符串s1 = (char *)malloc(64);// 判斷內(nèi)存分配是否成功if(s1 == NULL){return -1;}// 向內(nèi)存空間寫入值strcpy(s1, "abcd");// 計算字符串大小*len1 = strlen(s1);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str1 = s1;// II . 生成第一個字符串s2 = (char *)malloc(64);// 判斷內(nèi)存分配是否成功if(s2 == NULL){return -2;}// 向內(nèi)存空間寫入值strcpy(s2, "1234");// 計算字符串大小*len2 = strlen(s2);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str2 = s2;return 0; }二級指針 最終 指向的內(nèi)存釋放 : 釋放二級指針 指向的 一級指針 指向的內(nèi)存的地址 , 釋放后 將指針指向的地址置空 ;
/** 釋放字符串內(nèi)存*/ int free_str(char **str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放二級指針 指向的 一級指針 指向的內(nèi)存的地址// 釋放指針free(*str);// 將指針指向的地址置空*str = NULL;return 0; }一級指針 指向的內(nèi)存釋放 : 釋放一級指針 指向的內(nèi)存的地址 , 釋放后 無法 將指針指向的地址置空 ;
/** 釋放字符串內(nèi)存* 傳入 一級指針 , 只能釋放一級指針指向的內(nèi)存* 不能 講一級指針 置空*/ 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);// 判斷內(nèi)存分配是否成功if(s1 == NULL){return -1;}// 向內(nèi)存空間寫入值strcpy(s1, "abcd");// 計算字符串大小*len1 = strlen(s1);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str1 = s1;// II . 生成第一個字符串s2 = (char *)malloc(64);// 判斷內(nèi)存分配是否成功if(s2 == NULL){return -2;}// 向內(nèi)存空間寫入值strcpy(s2, "1234");// 計算字符串大小*len2 = strlen(s2);// 將生成的字符串 , 通過二級指針 間接賦值 給 一級指針*str2 = s2;return 0; }/** 釋放字符串內(nèi)存*/ int free_str(char **str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放二級指針 指向的 一級指針 指向的內(nèi)存的地址// 釋放指針free(*str);// 將指針指向的地址置空*str = NULL;return 0; }/** 釋放字符串內(nèi)存* 傳入 一級指針 , 只能釋放一級指針指向的內(nèi)存* 不能 講一級指針 置空*/ int free_str2(char *str) {// 判斷傳入的二級指針是否合法if(str == NULL){return -1;}// 釋放一級指針free(str);return 0; }int main() {// 第一個字符串char *str1 = NULL;// 第一個字符串字符個數(shù)int len1 = 0;// 第二個字符串char *str2 = NULL;// 第二個字符串字符個數(shù)int len2 = 0;// 函數(shù)調(diào)用的返回值int ret = 0;// 調(diào)用函數(shù) , 傳入二級指針ret = get_str(&str1, &len1, &str2, &len2);// 打印函數(shù)中生成的字符串printf("str1 = %s, str2 = %s\n", str1, str2);// 釋放字符串指針指向的內(nèi)存 , 傳入二級指針free_str(&str1);// 釋放字符串指針指向的內(nèi)存 , 傳入一級指針free_str2(str2);// 命令行不要退出system("pause");return 0; }執(zhí)行結(jié)果 :
總結(jié)
以上是生活随笔為你收集整理的【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】const 关键字用法 (
- 下一篇: 【C 语言】二级指针作为输入 ( 指针数