多重指针操作
来源:互联网 发布:mac切换输入法设置 编辑:程序博客网 时间:2024/06/03 17:02
之前对多重指针操作心存忐忑,不能很熟练使用,本质原因是不了解其实质,因此对其进行了学习。
一、简单的代码如下
#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的题目举例
阅读全文
0 0
- 多重指针操作
- 指针数组和多重指针
- 多重继承this指针
- C++ 多重指针
- C++学习:** 多重指针
- 多重纹理的操作
- C语言复习 -- 多重指针
- C++ void*指针、多重指针void**和指针大小
- 多重继承、虚函数、this指针偏移
- 多重继承时的指针转换偏移
- 多重继承时的指针转换偏移
- C++动态数组,多重指针问题
- 研究多重指针的实例分析
- C++动态数组,多重指针问题
- VC++学习之路<多重指针>
- 用多重数组来表示指针
- C++多重继承的指针问题
- 指针操作
- ML for trading -cs7646-01
- php秒杀
- 坐标系统及投影概述
- TensorFlow实现Batch Normalization
- C# 去html标签
- 多重指针操作
- 金蝶EAS,序时簿界面数据背景色,根据枚举值设置背景色
- 获取不到Struts2值栈的值的原因之一
- Material Design----全新的界面设计语言(一)
- JavaScript:面向对象编程改装的例子
- 算法导论 练习题 16.1-2
- oracle表回滚到一个指定时间的操作语句
- STM32,定时器
- RPC的通俗讲解