八、C++指针(1)

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

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

可以利用指针变量保存地址(指针就是地址)

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

指针变量定义语法:

数据类型 * 变量名;
#include
#include
using namespace std;

int main()
{
	//1、定义指针
	int a = 10;
	int* p;		//创建指针变量
	p = &a;		//让指针记录变量a的地址
	cout << "a的地址为:" << &a << endl;
	cout << "指针p为:" << p << endl;

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

	system("pause");
	return 0;
}

运行结果:

a的地址为:00CFFC9C
指针p为:00CFFC9C
a = 1000
*p = 1000

三、指针所占内存空间

指针也是一种数据类型

int *p;
  • 在32位操作系统下:占用4个字节空间
  • 在64位操作系统下:占用8个字节空间
#include
using namespace std;

int main()
{
	//指针所占内存空间
	int a = 10;

	//int* p;		//创建指针变量
	//p = &a;		//让指针记录变量a的地址
	//等价于
	int* p = &a;

	//cout << "sizeof (int *):" << sizeof(p) << endl;
	//等价于
	cout << "sizeof (int *):" << sizeof(int *) << endl;
	cout << "sizeof (float *):" << sizeof(float *) << endl;
	cout << "sizeof (double *):" << sizeof(double *) << endl;
	cout << "sizeof (char *):" << sizeof(char *) << endl;
	
	system("pause");
	return 0;
}

运行结果:

sizeof (int *):4
sizeof (float *):4
sizeof (double *):4
sizeof (char *):4

四、空指针和野指针

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

用途:初始化指针变量

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

1、空指针

#include
using namespace std;

int main()
{
	//空指针
	//1、空指针用于给指针变量进行初始化
	int* p = NULL;	//NULL在内存中代表0

	//2、空指针是不可以进行访问的
	//0~255之间的内存编号是被系统占用的,因此不可以被访问
	*p = 100;	//报错

	system("pause");
	return 0;
}

2、野指针

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

#include
using namespace std;

int main()
{
	//野指针
	int* p = (int *)0x1100;	//直接指向16进制没有申请的内存空间
	cout << *p << endl;	//报错

	system("pause");
	return 0;
}

五、const修饰指针

三种情况:

  1. const修饰指针——常量指针
  2. const修饰常量——指针常量
  3. const既修饰指针,又修饰常量

 1、常量指针

语法:

const int *p = &a;

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

*p = 20;    //错误,指针指向的值不可以修改
p = &b;    //正确,指针指向可以修改
#include
using namespace std;

int main()
{
	//1、const修饰指针,常量指针
	int a = 10;
	int b = 20;
	
	const int* p = &a;
	//指针指向的值不可以改,指针的指向可以改
	//*p = 20;	//错误
	p = &b;		//正确
	cout << *p << endl;	//报错

	system("pause");
	return 0;
}

2、指针常量

语法:

int * const p = &a;

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

* p = 20;    //正确
p = &b;    //错误

3、const既修饰指针,又修饰常量

const int * const p = &a;

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

* p = 20;    //错误
p = &b;    //错误
#include
using namespace std;

int main()
{
	//1、const修饰指针,常量指针
	int a = 10;
	int b = 20;

	const int* p = &a;
	//指针指向的值不可以改,指针的指向可以改
	//*p = 20;	//错误
	p = &b;		//正确
	cout << *p << endl;

	//2、const修饰常量,指针常量
	//指针指向的值可以改,指针的指向不可以改
	int* const p2 = &a;
	*p2 = 100;	//正确
	//p2 = &b;	//错误,指针的指向不可以改
	cout << *p2 << endl;
		
	//3、const修饰指针和常量
	//指针指向的值和指针的指向都不可以修改
	//*p2 = 100;	//错误
	//p2 = &b;	//错误

	system("pause");
	return 0;
}

运行结果:

20
100

你可能感兴趣的:(C++,后端,c++,开发语言,算法,学习,考研)