内容发布更新时间 : 2025/5/10 6:12:19星期一 下面是文章的全部内容请认真阅读。
欢迎阅读
//改变1级指针(eg char *p = 0x1111 )的值,有2种方式
//改变2级指针的(eg char **pp1 = 0x1111 )的值,有2种方式
//函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。
//指针作为函数参数的精髓。
铁律3:理解指针必须和内存四区概念相结合
1) 主调函数 被调函数
a) 主调函数可把堆区、栈区、全局数据内存地址传给被调用函数 b) 被调用函数只能返回堆区、全局数据 2) 内存分配方式
a) 指针做函数参数,是有输入和输出特性的。
铁律4:应用指针必须和函数调用相结合(指针做函数参数) 编号 指针函数参数 主调函数 被调函数 备注 内存分配方式(级别+堆栈) 实参 形参 01 1级指针 堆 分配 使用 一般应用(做输入) 禁用 栈 分配 使用 常用 Int showbuf(char *p); int showArray(int *array, int iNum) 02 1级指针 栈 使用 结果传出 常用 (做输出) int geLen(char *pFileName, int *pfileLen); 03 2级指针 堆 分配 使用 一般应用(做输入) 禁用 栈 分配 使用 常用 int main(int arc ,char *arg[]); 指针数组 int shouMatrix(int [3][4], int iLine);二维字符串数组 04 2级指针 堆 使用 分配 常用,但不(做输出) 建议用,转化成02 int getData(char **data, int *dataLen); Int getData_Free(void *data); Int getData_Free(void **data); //避免野指针 05 3级指针 堆 使用 分配 不常用 (做输出) int getFileAllLine(char ***content, int *pLine); int getFileAllLine_Free(char ***content, int *pLine); 指针做函数参数,问题的实质不是指针,而是看内存块,内存块是1维、2维。 1) 如果基础类int变量,不需要用指针; 2) 若内存块是1维、2维。
铁律5:一级指针典型用法(指针做函数参数) 一级指针做输入
int showbuf(char *p)
int showArray(int *array, int iNum) 一级指针做输出 欢迎阅读
欢迎阅读
int geLen(char *pFileName, int *pfileLen); 理解
主调函数还是被调用函数分配内存 被调用函数是在heap/stack上分配内存
铁律6:二级指针典型用法(指针做函数参数) 二级指针做输入
int main(int arc ,char *arg[]); 字符串数组 int shouMatrix(int [3][4], int iLine); 二级指针做输出
int Demo64_GetTeacher(Teacher **ppTeacher); int Demo65_GetTeacher_Free(Teacher **ppTeacher); int getData(char **data, int *dataLen); Int getData_Free(void *data); Int getData_Free2(void **data); //避免野指针 理解
主调函数还是被调用函数分配内存 被调用函数是在heap/stack上分配内存 铁律7: 三级指针输出典型用法 三级指针做输出 int getFileAllLine(char ***content, int *p