【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )
生活随笔
收集整理的這篇文章主要介紹了
【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 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】const 关键字用法 (
- 下一篇: 【C 语言】二级指针作为输入 ( 指针数