翻了下以前的Blog,两年以前的了。当时还说每天练一点,慢慢熟悉,简直naive。
|双重指针**p
双重指针记得是说和二维数组一致,但是有点晕。搜集了一些资料,整理一下:
假如我有一个m×n维的数组array,想要对应到指针p、q、r上去:
int array[m][n];
int (*p)[n];
int **q;
int* r[m];
*r[m]好理解,r是一个m元的数组,每个元素是一个指针。
但是(*p)[n]不是很好理解为什么对应是[n]:在这里,p是一个指向数组的指针,指向的数组包含n个元素。相当于,p+1的地址,是在原有地址上增加整个n元数组的大小。
|指针*p和数组p[]到底有什么区别
给指针p分配内存是,new的是堆上的内存,而p[]是栈内存。数组是数组,指针是指针!
这就是为什么说:
char s1[]="123456";
char *s2 = "123456";
前者是运行时赋值,而后者是编译时就已经确定了(如果我没记错的话),是在静态区,因此也无法更改。
s2[0] = '3';
会报错。