1. 定义指针: 数据类型 * 指针变量名
int *p;
// 让指针记录变量a的地址
P = &a;
2. 使用指针
可以通过解引用的方式来找到指针指向的内存
指针前加*, 表示解引用,找到指针指向的内存里的数据。
*p = 1000;
3. 指针占用的内存空间
在32位操作系统下,占用4字节。在64位下,占8字节。一般用32位操作系统开发。
X86 是32位系统, x64 是64位系统。
4. 空指针:指针变量执行内存中编号为0的空间
4.1 用途:用于给指针变量初始化
int *p = NULL;
4.2 空指针是不可以访问的
0 - 255 之间的内存编号是系统占用的,不可以访问。
cout << *p; // 错
5. 野指针: 指针变量指向非法的内存空间
int *p = (int *) 0x1100;
cout<<*P; // 编译通过,执行时报错
6. const 修饰指针
const int *p = &a; // 常量指针,指针的指向可以改,但指针指向的值不可以改
int * const p = &a; // 指针常量,指针的指向不可以改,指针指向的值可以改
const int * const p = &a; // 指针的指向和指针指向的值都不可以改
7. 指针和数组
int arr[10] = {1, 2, 3, 4, 5};
int * p = arr; // 数组名就是数组的首地址
cout<<*p; // 数组第一个数据 1
P++;
cout<<*p; // 数组第二个数据 2
8. 指针和函数: 值传递, 地址传递,
8.1 值传递:不修改实参
void swap01(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
8.2 地址传递:修改实参
void swap02(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}