多重指针操作
之前對多重指針操作心存忐忑,不能很熟練使用,本質原因是不了解其實質,因此對其進行了學習。
?
一、簡單的代碼如下
?
#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
?
總結
- 上一篇: 刷淘宝流量软件推荐 免费刷淘宝流量软件
- 下一篇: 一些自己编写的字符串操作函数