二级指针的三种内存模型
这里其实算是总结,具体的分别会在后面各章节中讲述。
第一种内存模型(指针数组) char *strArray[] = {"aaaa22222","bbbbb","ddddddd","ddddddss222"}; |
第二种内存模型(二维数组,数组指针) char strArray[10][30] = {"aaaa22222","bbbbb","ddddddd","ddddddss222"}; |
第三种内存模型(二级指针) char **strArray; |
三种内存模型如下(下图是班上一student画的,在这里也可以做为一种理解吧) |
|
如何理解 char *******s或 char *s? 1) 站在编译器的角度:s就是一个指针变量,只为其分配4个字节内存。 2) 站在在程序员的度 |
二级指针技术推演
数组参数 | 等效的指针参数 |
一维数组char a[5]; | 指针 char *a; |
指针数组char *a[5]; | 指针的指针char **a; |
二维数组char a[2][3]; | 数组指针 char (*a)[3]; |
void fun(int a[5]) →void fun(int a[]) →void fun(int* a);
void fun(int a[2][3]) →void fun(int a[][3]) →void fun(int (*a)[3]);
谨记:
概念不清晰是产生bug的根源。
如果你能深入做到技术推演,你就能写出优秀稳定的代码。