1:指针和数组
指针是地址,数组名是首元素地址,是不是意味着数组名是指针(变量)呢?
显然不是这样的,数组名是地址常量,不可被修改,而指针是可以被修改的,所以,不要把数组名认为是指针,这两者没有关系。
2:二级指针
指针变量用来存放变量的地址,但指针变量也应该有地址,它的地址用什么存放呢?
答案是二级指针。
#include <stdio.h> int main() { int a = 0; //int *pa拆开来看,*表示pa是一个指针,存放int类型变量的地址 int *pa = &a; //int **ppa拆开来看,*表示ppa是一个指针,存放int*类型变量的地址 //即存放一级指针的地址 int **ppa = &pa; return 0; }
3:指针数组
指针数组是数组还是指针呢?
是数组,后续会有数组指针,数组指针是指针。
#include <stdio.h> int main() { /* int arr[3][3]; for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { arr[i][j] = 0; } } */ int arr1[3]; int arr2[3]; int arr3[3]; int *arr[3] = {arr1,arr2,arr3}; for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { arr[i][j] = 0; } } //两者间的区别在哪里呢? return 0; }
区别在于,空间是否连续: