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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

多重指针操作

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多重指针操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前對多重指針操作心存忐忑,不能很熟練使用,本質原因是不了解其實質,因此對其進行了學習。

?

一、簡單的代碼如下

?

#include <stdio.h> #include <stdlib.h> #include <string.h>void myArray(char ***p2, int num) {int i=0;//不要判斷*p2所指向的內存,//因為傳參是&p1,也就是指針變量p1的地址;//如果再判斷*p2,也就是判斷指針變量p1的指向了,本來p1就指向NULL,判斷沒有什么意義。//畢竟這里判斷的目的是,判斷p2現在有沒有存放地址了而已char **tmp = NULL;if(p2 == NULL) return;/*int* p;p = (int*)malloc( sizeof(int)*100 );//sizeof()中的類型只是表明多大而已,和p的類型沒有必然的聯系//一般來說,強制轉換為什么類型,則sizeof()中的類型就少一顆*;*///tmp = (char **)malloc(sizeof(tmp) *100);//sizeof(tmp)=4,畢竟tmp是一個指針。tmp = (char **)malloc(sizeof(char*) * 100);//這里的100是說有100個字符串指針if(tmp == NULL)return;for (i =0; i<num; i++){//tmp[i] = (char *)malloc(sizeof(char *)* num );//sprintf(tmp[i], "%d""%d""%d", i+1, i+1, i+1);tmp[i] = (char *)malloc(sizeof(char )* num);sprintf(tmp[i], "%d""%d""%d", i + 1, i + 1, i + 1);//填充tmp[i]}*p2 = tmp; }void myArray_Free(char ***p2, int num) {int i = 0;char **tmp = NULL;if(p2 == NULL)return;tmp = *p2;for (i=0; i<num; i++)free(tmp[i]); //釋放*tmp所指向的內存free(tmp);//釋放tmp所指向的內存*p2 = NULL;//實參指向NULL }int main() {int i = 0;int num = 5;char ** p1 = NULL;//char tmp[100];myArray(&p1, num);for(i=0; i<num; i++){printf("p1 = %s\n", p1[i]);}myArray_Free(&p1, num);getchar();return 0; }


對代碼的解釋如下

?

?

?

?

? ? ? ? 另外,這和二重指針與一重指針類似,之所以子函數中要三重指針作為參數,是因為要改變主函數中二重指針的指向。(這里主函數中是char** p=NULL,而子函數中要將p指向新開辟的有100個元素的空間)如果子函數中還是二重指針,而主函數中傳參也是二重指針的話,就類似于值傳遞了,不能修改主函數二重指針的指向。按此道理,三重和四重應該是類似的道理的,只是很少用到。

?

二、leetcode的題目舉例

https://blog.csdn.net/oqqHuTu12345678/article/details/72896249

?

總結

以上是生活随笔為你收集整理的多重指针操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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