一、数组名的理解
(1)一般情况
- 数组名就是数组⾸元素(第⼀个元素)的地址。
(2)特殊情况(唯二)
sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的大⼩,单位是字节
&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)
(3)思考
(4)arr和&arr的区别
- &arr[0]和&arr[0]+1相差4个字节,arr和arr+1 相差4个字节,是因为&arr[0] 和 arr 都是⾸元素的地址,+1就是跳过⼀个元素。
- 但是&arr 和 &arr+1相差40个字节,这就是因为&arr是数组的地址,+1 操作是跳过整个数组的
二、使用指针访问数组
三、一维数组传参的本质
(1)本质
数组传参本质上传递的是数组⾸元素的地址,所以函数形参的部分理论上应该使⽤指针变量来接收⾸元素的地址
(2)总结
⼀维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。
sizeof(arr) 计算的是⼀个地址的⼤⼩(单位字节)⽽不是数组的⼤⼩(单位字节)。正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。
四、冒泡排序
(1)核心思想
- 相邻的两个元素比较,如果不满足顺序就交换
(2)代码呈现
#include<stdio.h>
void Bubble_sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[10] = { 2,4,5,8,1,3,7,9,0,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
Bubble_sort(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
五、二级指针
(1)铺垫知识
int* p = &a(p是指针变量)
(2)二级指针
int * * pp= &p;,int*组合起来证明pp指向的对象(p)的类型是int*
六、指针数组
(1)概念:存放指针的数组
(2)
- 指针数组的每个元素是地址,⼜可以指向⼀块区域
七、指针数组模拟二维数组
- arr [ i ] === *(arr + i ) {计算机计算形式} arr[i][j] ===*(* (arr+i) +j)
- parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
- 上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。