数组名的理解
数组名字,表示数组首元素的地址,&arr[0],arr。
但是有两个例外:
1.sizeof(数组名)------arr代表整个数组,计算的是整个数组的大小,单位是字节
2.&arr------arr代表整个数组,取出的是整个数组的地址
使用指针访问数组
arr[i]可以访问数组,p[i]也可以访问数组。
本质上,p[i]等于*(p + i);arr[i]等于*(arr + i)。
这其实只是写法不同,其实是一样的。因为数组元素的访问在处理的时候,是先转换成首元素的地址 + 偏移量来求出地址,然后再解引用访问的。
一维数组传参的本质
前情提要:数组名世首元素的地址。
很容易得到,一维数组传参的本质:传递的是数组首元素的地址。
函数形参可以使用指针接受首元素地址,如void text(int* p){...};也可以写成数组的形式。
冒泡排序
核心思想:两两相邻的元素进行比较。
二级指针
二级指针存放某个指针的地址。(不限制级数)
例如:
int* p = #//存放num的地址
int** p = &p;//存放指针变量p的地址。
(只有"存储在内存中且可被标识的对象"才有地址)
指针数组
指针数组是存放指针的数组,每一个元素是用来存放地址(指针)的,而地址(指针),又指向一块区域。
指针数组模拟二维数组
数组名是首元素地址,类型为int*,可以存放在指针数组parr中。
parr[i][j],parr[i]指向数组首元素地址,数组首元素地址[j]指向数组第j个元素。
用for循环实现指针数组模拟二维数组。
实际上不是是二维数组。因为每一行并非是连续的。