C++指针

1、指针的基本概念

指针的作用: 可以通过指针间接访问内存

**巧计:**指针就是地址

  • 内存编号是从0开始记录的,一般用十六进制数字表示

  • 可以利用指针变量保存地址

2、指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名;

image-20220521141742899

#include <iostream>
using namespace std;
int main() {

	//1、指针的定义
	int a = 10; 	//定义整型变量a
	
	//指针定义语法: 数据类型 * 变量名 ;
	int * p;

	//指针变量赋值
	p = &a; 			  //指针指向变量a的地址
	cout << &a << endl;    	//打印数据a的地址
       //输出0073F7A4


	cout << p << endl;  	//打印指针变量p
        //输出0073F7A4

	//2、指针的使用
        //可以通过解引用的方式来找到指针指向的内存
	//通过*代表解引用,操作指针变量指向的内存中的数据
	cout << "*p = " << *p << endl;
        //输出*p = 10

	system("pause");

	return 0;
}

image-20220521151655417

3、指针变量和普通变量的区别

  • 普通变量存放的是数据,指针变量存放的是地址
  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

总结1: 我们可以通过 & 符号 获取变量的地址

总结2:利用指针可以记录地址

总结3:对指针变量解引用,可以操作指针指向的内存

4、指针所占内存空间

#include <iostream>
using namespace std;
int main() {
int a = 10;

int * p;
p = &a; //指针指向数据a的地址,通过&符号解引用

cout << *p << endl;           //* 解引用
cout << sizeof(p) << endl;
cout << sizeof(char *) << endl;
cout << sizeof(float *) << endl;
cout << sizeof(double *) << endl;

system("pause");

return 0;
}

总结:所有指针类型在32位操作系统下是4个字节,64位是8个字节

5、空指针和野指针

空指针:指针变量指向内存中编号为0的空间

**用途:**初始化指针变量

**注意:**空指针指向的内存是不可以访问的

5.1空指针

//空指针
#include <iostream>
using namespace std;
int main() {

	//指针变量p指向内存地址编号为0的空间
	int * p = NULL;

	//访问空指针报错 
	//内存编号0 ~255为系统占用内存,不允许用户访问
	cout << *p << endl;

	system("pause");

	return 0;
}

运行会发生报错!因此最好少使用空指针!

报错:读取访问权限冲突,关键字:nullptr

image-20220524134502349

5.2野指针

野指针:指针变量指向非法的内存空间

int main() {

	//指针变量p指向内存地址编号为0x1100的空间
	int * p = (int *)0x1100;

	//访问野指针报错 
	cout << *p << endl;

	system("pause");

	return 0;
}
报错:读取访问权限冲突

image-20220524134810627

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

6、const修饰指针

6.1 const修饰指针——常量指针

定义语法:const 数据类型 * 变量名

image-20220521191610524

特点:指针指向可以修改,指针指向的值不可以修改

6.2 const修饰常量——指针常量

定义语法:数据类型 * const 变量名

image-20220521191646219

特点:指针的指向不可以修改,指针指向的值可以修改

6.3 const既修饰指针,又修饰常量

定义语法: const 数据类型 * const 变量名

image-20220521191722414

特点:指针的指向和指针指向的值都不可以修改

三种类型的记忆

记忆: 常量–>const;指针–>*;

不能修改什么:

  1. const后面是p,即常量;说明const修饰的是常量,限制的是指针,不能修改指针的指向(指针常量)
  2. const后面是星号,即指针;说明修饰的是指针,限制的是*p,不能够修改指针指向的值;(常量指针)

6.4 值传递与地址传递

image-20220521193705079

值传递:只是单纯地传递值;形参发生改变,实参不会改变;

地址传递:传递值后,若形参发生改变,实参也会跟着改变;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石先森很疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值