指针

163 阅读2分钟

作用:可以通过指针间接访问内存。指针也是变量,存放的是地址。

        //定义指针
	int * p;
	//让指针记录变量a的地址
	p = &a;
	cout << "a的地址:" << p << endl;
	cout << "a的地址:" << &a << endl;

        //使用指针
	//可以通过解引用的方式来找到指针指向的内存
	//指针前加*代表解引用,找到指针指向的内存中的数据*p不等于a
	*p = 100;
	cout << "a=" << a << endl;
	cout << "*p" << *p << endl;

2.空指针

        /*
	空指针:指针变量指向内存中编号为0的空间。
	用途:初始化指针变量
	注意:空指针指向的内存是不可以访问的,因为0-255是系统占用的
	*/
	//1.一开始不知道指向哪里合适,给指针变量进行初始化
	int * p = NULL;

	//2.空指针是不可以直接访问的,会报错
	*p = 100;

3.野指针

        //野指针:指针变量指向非法的内存空间
	//野指针
	int * p = (int * )0x1100;

	//访问野指针,会报错:引发了异常: 读取访问权限冲突。
	cout << *p << endl;

4.const修饰

        int a = 10;
	int b = 10;
	//1.const修饰指针 常量指针
	//特点:指针的指向可以改,但指针指向的值不可以改
	const int * p = &a;
	//*p = 20; 错
	p = &b;

	//2.const修饰常量 指针常量
	//特点:指针的指向不可以改,指针指向的值可以改
	int * const p2 = &a;
	*p2 = 20;
	//p2 = &b; 错

	//3.const修饰指针和常量
	//特点:指针的指向和指向的值都不可以改
	const int * const p3 = &a;
	//*p3 = 20; 错
	//p = &b; 错

5.利用指针访问数字中的元素

        //定义数组
	int arr[] = { 1,2,4 };
	//arr就是数组的首地址
	int * p = arr;
	cout << "数组中第一个元素:" << *p << endl;

	//将指针后移一位
	p++;
	cout << "数组中第二个元素:" << *p << endl;
	
	//使用指针遍历数组
	int * p2 = arr;
	for (int i = 0; i < 3; i++)
	{
		cout << *p2 << endl;
		p2++;
	}

6.地址传递

//参数传递方式:地址传递
void swap2(int *p1,int *p2) {

	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

        int a = 10;
	int b = 20;
	//调用函数传递地址
	swap2(&a, &b);

	cout << "a的值是:" << a << endl;
	cout << "b的值是:" << b << endl;