一,数组名的理解及指针
数组的数组名,是首元素的地址。
但是,有两个例外:
(1),sizeof(数组名):这里表示整个数组,计算的是整个数组的大小,单位是字节。
(2),&数组名:这里的数组名表示整个数组,取出的是整个数组的地址。(整个数组的地址与首元素的地址是有区别的)
除了(1)(2)其他都表示首元素地址。
前四个数组名是首元素的地址,类型是int*,+1就是跳过一个字节。
用指针输入数组:
eg:
其中,*(p+i)= p[i] = arr[i] = *(ar + i) arr[i](*(arr+i))=i[arr](*(i+arr))
(1)数组就是数组,是一块连续的空间。(数组的大小和数组元素个数元素类型都有关系)
(2)指针变量就是指针变量,是一个变量。(2/ 8个字节)
(3)数组名是一个地址,首元素地址。
(4)可用指针来访问数组。
这里错误的原因是因为,arr是数组名是首元素的地址并且数组在传参时候,形参可以写成数组的形式,但是本质还是指针,因此在sizeof(arr)/ sizeof(arr[0])这里得不到元素的个数。
注:(1)数组传参的本质是传递了数组首元素的地址,所以形参访问的数组和实参访问的数组是同一个数组。
(2)形参的数组时不会单独再创造数组空间,所以形参的数组是可以忽略数组的大小。
所以正确的是
由此我们可以写一个冒泡排序;
二,二级指针
这里int* *p(*p表示指针变量,int**表示几级指针类型)
三,指针数组
如图可知,指针数组强调的是数组。
可用指针数组模拟二维数组:
为了更好地理解,可以看下面图示
本质还是指针的运算。