目录
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //1.定义指针
- int a = 10;
- //指针定义的语法
- int * p;
- //让指针记录变量a的地址
- p = &a;
- cout << "a的地址为:" << &a << endl;
- cout << "指针p为:" << p << endl;
- }
结果:

- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //1.定义指针
- int a = 10;
- //指针定义的语法
- int * p;
- //让指针记录变量a的地址
- p = &a;
- cout << "a的地址为:" << &a << endl;
- cout << "指针p为:" << p << endl;
-
- //2.使用指针
- //可以通过解引用的方式来找到指针指向的内存
- //指针前加 * 代表解引用,找到指针指向的内存中的数据
- *p = 1000;
- cout << "a = " << a << endl;
- cout << "*p = " << *p << endl;
- }
结果:

表示通过指针修改了存储变量a的内存
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //指针所占内存空间
- int a = 10;
- int * p = &a;
- cout << sizeof(p) << endl;
- }
结果:
4(32位操作系统)
8(64位操作系统)
含义:指针变量指向内存中编号为0的指针称为空指针。
作用:初始化指针变量
注意:空指针指向的内存是不可以访问的
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //空指针
- //1.空指针用于给指针变量进行初始化
- int * p = NULL;
-
- //2.空指针是不可以进行访问的
- //0~255之间的内存编号是系统占用的,因此不可以访问
- //*p = 100;
-
- }
指针变量指向非法的内存空间的指针称为野指针,在程序中应避免出现野指针。
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //野指针
- int * p = (int *)0x1100;
- cout << *p << endl;
- }
结果:

空指针和野指针都不是我们申请的空间,不要访问。
const修饰指针有三种情况:
1.const修饰指针称为常量指针
特点:指针的指向可以修改,但是指针指向的值不可以修改
例:
int a = 10;
const int * p = &a;
*p = 20; (×)
p = &b; (√)
2.const修饰常量称为指针常量
特点:指针的指向不可以修改,但是指针指向的值可以修改
例:
int a = 10;
int * const p = &a;
*p = 20; (√)
p = &b; (×)
3.const即修饰指针,又修饰常量
特点:指针的指向不可以修改,但是指针指向的值也不可以修改
例:
int a = 10;
const int * const p = &a;
*p = 20; (×)
p = &b; (×)
7.1 利用指针访问数组元素:
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //利用指针访问数组中的元素
- int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
- int * p = arr; //创建一个整型的指针指向数组,arr就只数组的首地址
- cout << "数组中的第一个元素:" << *p << endl;
- p++; //让指针向后偏移4个字节
- cout << "数组中的第二个元素:" << *p << endl;
- }
结果:

7.2 利用指针遍历数组:
- #include
- using namespace std;
- #include "swap.h"
-
-
- int main()
- {
- //利用指针遍历数组
- int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
- int * p2 = arr;
- for (int i = 0; i < 10; i++) {
- cout << *p2 << endl;
- p2++;
- }
- }
结果:

- #include
- using namespace std;
- #include "swap.h"
-
- void swap(int *p1, int *p2) {
- int temp = *p1;
- *p1 = *p2;
- *p2 = temp;
- }
-
- int main()
- {
- int a = 10;
- int b = 20;
- //地址传递:可以修饰实参
- swap(&a, &b);
- //查看a和b有没有被交换
- cout << "a=" << a << endl;
- cout << "b=" << b << endl;
-
- }
结果:
