int arr[3][4];
书上说arr是指针的指针。
但是有点问题,为什么arr和arr[0]的值是一样的。
如果它是指针的指针的话,那么arr应该在一个内存空间1中存着arr[0]的地址,这个内存空间也有自己的地址。
但是这个内存空间的地址却与内存空间中存着的地址是相同的...
arr的值本身是二维数组的首地址,它存储的内容也是数组的首地址
printf("%p %p\n", arr, *arr);// 这2个值一样,它存储的值是数组的首地址就是说他指向数组数组的首地址这个指针,即指针的指针
//另外,也可以说他指向自己
p1:指针变量名
p1:访问p1指向的变量
p2:二级指针变量【指向一级指针,保存的是一级指针变量的内存地址】
*p2:获取一级指针的值【即一级指针指向的变量的内存地址】
**p2:获取一级指针指向的变量的值
输出p2得到的是一级指针变量的地址
输出*p2得到的是一级指针变量指向的普通变量的地址
输出*p2得到的是一级指针变量指向的普通变量的值
arr是行指针,arr[0]是列指针。arr+1 和arr[1]+1中1是不一样,一个是一行,一个是一列。
arr、arr[0]、&arr[0][0] 地址都相同,arr[0]和&arr[0]都是列指针。
arr[i]等价于*(arr+i)
arr[i][j]等价于*(*(arr+i)+j)