指针详解(二)
1. 数组名的理解
数组名是数组首元素的地址,但以下两种情况除外:
sizeof(数组名):这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。&数组名:这里的数组名表示整个数组,取出的是整个数组的地址。
2. 使用指针访问数组
- 数组是一块连续的空间,大小和元素个数、类型有关。
- 指针是一个变量,占 4/8 个字节。
- 数组名是首元素的地址。
- 可以利用指针来访问数组。
- 关系式:
arr[i] = *(arr+i) = *(p+i) = p[i] - 编译器处理时,将元素访问转换为:首元素地址 + 偏移量求出元素地址,然后解引用访问。
3. 一维数组传参的本质
本质上,数组传参传递的是数组首元素的地址,形参访问的数组和实参的数组是同一个。所以在函数内部不能通过 sizeof 计算数组大小。
一维数组传参,形参部分可以写成数组的形式,也可以写成指针的形式。形参的数组不会单独创建空间,所以可以省略数组大小。
4. 冒泡排序
冒泡排序:两两相邻的元素比较,每一次遍历会将当前未排序部分中最大(或最小)元素冒泡到正确位置上。
常见排序算法包括:冒泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序等。
5. 二级指针
二级指针:指向指针的指针,用于储存指针变量的地址。
#include <stdio.h>
int main() {
int a = 3;
int* p = &a;
int** pp = &p;
printf("%p", *pp);
printf("%d", **pp);
}
*pp 解引用得到一级指针 p,**pp 进一步解引用得到变量 a 的值。
6. 指针数组
- 指针数组:由指针变量构成的数组,每个数组元素都是一个指针。
- 数组指针:指向数组的指针。
7. 指针数组模拟二维数组
(此处内容略,通常涉及指针数组存储行地址)
8. 字符指针变量
字符指针变量:指向字符类型数据的指针,用于储存字符变量的地址。声明方式:char *ptr。ptr 可以指向一个字符或者字符数组的首地址。
直接指向字符变量
char ch = 'A';
char *ptr = &ch;

