0
点赞
收藏
分享

微信扫一扫

c++(04-指针)

王老师说 2022-03-12 阅读 86

文章目录

7 指针

7.1 指针的基本概念

指针的作用:可以通过指针间接访问内存
,内存编号是从0开始记录的,一般用十六进制数字表示
可以利用指针变量保存地址

7.2 指针变量的定义和使用

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

int main()
{

	//1.定义指针
	int a = 10;
	//指针定义的语法:指针类型 * 指针变量名;
	int *p;
	//让指针记录变量a的地址
	p = &a;
	cout << "&a的地址:" << &a << endl;
	cout << "p的地址:" << p << endl;
	//2.使用指针
	//可以通过解引用的方式来找到指针指向的内存
	//指针前加*代表解引用,找到指针指向内存中的数据
	//可以访问,修改
	*p = 1000;
	cout <<"*p=" << *p << endl;
	cout <<"a=" << a << endl;
}

7.3 指针所占空间大小

int main()
{
	//32位的操作系统下,无论什么数据类型,指针都只占4字节
	//64位的操作系统下,无论什么数据类型,指针都只占8字节
	int a = 10;
	int* p = &a;
	cout << "sizeof(int *)=" << sizeof(int*) << endl;
	cout << "sizeof(float *)=" << sizeof(float*) << endl;
	cout << "sizeof(double *)=" << sizeof(double*) << endl;
	cout << "sizeof(char *)=" << sizeof(char*) << endl;
}

在这里插入图片描述

在这里插入图片描述

7.4 空指针和野指针

空指针:指针变量指向内存空间中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存空间是不可以访问的
在这里插入图片描述
野指针:指针变量指向非法的内存空间

int main()
{
	//通过野指针访问0x1100的内存地址的数据
	int *p = (int*)0x1100;
	//访问野指针报错
	cout << *p << endl;
}

7.5 const修饰指针

const修饰指针有三种情况:
1.const修饰指针——常量指针
2.const修饰常量——指针常量
3.const即修饰指针,又修饰常量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

技巧:看const右侧紧跟着的是指针还是常量是针就是常量指针,是常量就是指针常量

7.6 指针和数组

作用:利用指针访问数组中的元素

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int * p = arr;//arr就是数组的首地址
	cout << "利用指针访问数组的第一个元素的地址:" << *p << endl;
	p++;
	cout << "利用指针访问数组的第二个元素的地址:" << *p << endl;
	cout << "利用指针遍历数组\n";
	int * p2 = arr;
	for (int i = 0; i < 10; i++)
	{
		cout << *p2 << endl;
		p2++;
	}
}

在这里插入图片描述

void swap01(int num01, int num02)
{
	int temp = num01;
	num01 = num02;
	num02 = num01;
}
//地址传递
void swap02(int *p1,int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}
int main()
{
	int a=10,b=20;
	//地址传递
	swap01(a, b);//值传递不会改变实参
	cout << a <<" " << b << endl;
	swap02(&a, &b);//地址传递会改变实参
	cout << a<<endl;
	cout << b<<endl;
}

在这里插入图片描述

7.8 指针、数组、函数

案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排成
例如数组:intarr[10]={43,6,9,1,2,10.8.7.5}

void bubbleSort(int *arr, int len)
{
	for (int i = 0; i < len-1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}

		}
	}
}
void printfarray(int *arr,int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
}
int main()
{
	//1 创建数组
	int arr[10] = {4,1,3,7,5,2,9,6,8,10 };
	//数组长度
	int len = sizeof(arr) / sizeof(arr[0]);
	//2 创建函数,实现冒泡排序
	bubbleSort(arr,len);
	//3 打印排序后的数组
	printfarray(arr,len);
}
举报

相关推荐

0 条评论