c基础入门day7工具vs2026课程【黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难】7 指针7.1 指针的基本概念作用通过指针间接访问内存内存编号是从0开始记录的一般用十六进制数字表示可以利用指针变量保存地址7.2 指针变量的定义和使用指针变量定义语法数据类型 * 变量名指针变量的使用*p通过解引用的方式找到指针指向的内存中的数据程序示例#includeiostreamusingnamespacestd;intmain(){inta10;// 1. 定义指针// 指针定义语法数据类型 * 指针变量名int*p;// 让指针记录变量a的地址pa;couta的地址为aendl;cout指针p为pendl;// 2. 使用指针// 可以通过解引用的方式来找到指针指向的内存中的数据// 指针前加 * 代表解引用*p1000;couta aendl;cout*p *pendl;system(pause);return0;}7.3 指针所占内存空间在32位操作系统中占4字节在64位操作系统中占8字节与数据类型无关程序示例#includeiostreamusingnamespacestd;intmain(){// 指针所占内存空间inta10;int*pa;coutsizeof(int *) sizeof(int*)endl;coutsizeof(float *) sizeof(float*)endl;coutsizeof(double *) sizeof(double*)endl;coutsizeof(char *) sizeof(char*)endl;system(pause);return0;}7.4 空指针和野指针空指针指针变量指向内存中编号位0的空间空指针用途初始化指针变量空指针指向的内存是不可以访问的空指针程序示例#includeiostreamusingnamespacestd;intmain(){// 空指针// 空指针用于初始化指针变量int*pNULL;// NULL即0// 空指针是不可以进行访问的// 0~255之间的内存编号是系统占用的不可以被访问system(pause);return0;}野指针指针变量指向非法的内存空间是一种错误野指针程序示例异常#includeiostreamusingnamespacestd;intmain(){// 野指针// 随意定义一个没有申请的内存是不可以的int*p(int*)0x1100;// 0x1100是一个十六进制数(int*)转为十进制地址// 引发了异常: 读取访问权限冲突。cout*pendl;system(pause);return0;}空指针和野指针都不是我们申请的空间因此不可以被访问。7.5 const修饰指针const修饰指针常量指针const int* p a;1指针的指向可以修改2指针指向的值不可以改const修饰常量指针常量int* const p a;1指针的指向不可以修改2指针指向的值可以修改const既修饰指针又修饰常量const int* const p a;1指针的指向和指针指向的值都不可以改程序示例#includeiostreamusingnamespacestd;intmain(){inta10;intb10;// 1. const修饰指针常量指针constint*p1a;// 指针的指向可以修改;指针指向的值不可以改p1b;// 2. const修饰常量指针常量int*constp2a;// 指针的指向不可以修改;指针指向的值可以修改*p220;// 3. const既修饰指针又修饰常量constint*constpa;// 指针的指向和指针指向的值都不可以改system(pause);return0;}7.6 指针和数组作用利用指针访问数组中的元素复习数组名可以用于获取数组在内存中的首地址程序示例#includeiostreamusingnamespacestd;intmain(){// 指针和数组// 利用指针访问数组中的元素intarr[10]{0,1,2,3,4,5,6,7,8,9};cout第一个元素为arr[0]endl;int*parr;//复习数组名可以用于获取数组在内存中的首地址cout利用指针访问第一个元素为*pendl;p;//让指针向后偏移4个字节intcout利用指针访问第二个元素为*pendl;int*p2arr;cout利用指针遍历数组endl;for(inti0;i10;i){cout*p2endl;p2;}system(pause);return0;}7.7 指针和函数作用利用指针作为函数参数可以修改实参的值复习值传递不会改变实参的值程序示例#includeiostreamusingnamespacestd;// 实现两个数字进行交换voidswap01(inta,intb){inttempa;ab;btemp;coutswap01 a aendl;coutswap01 b bendl;}voidswap02(int*p1,int*p2){inttemp*p1;*p1*p2;*p2temp;}intmain(){// 指针和函数// 1. 值传递inta10;intb20;swap01(a,b);couta aendl;coutb bendl;// 2. 地址传递// 地址传递可以修改实参的值swap02(a,b);coutswap02 a aendl;coutswap02 b bendl;system(pause);return0;}7.8 指针、数组、函数案例描述封装一个函数利用冒泡排序实现对整型数组的升序排序例如数组int arr[10] {4,3,6,9,12,10,8,7,5};#includeiostreamusingnamespacestd;// 封装一个冒泡函数实现对整型数组的升序排序voidBubbleSort(int*arr,intlen){for(intj0;jlen-1;j){for(intk0;klen-j-1;k){if(arr[k]arr[k1]){inttemparr[k];arr[k]arr[k1];arr[k1]temp;}}}}// 封装打印数组的函数voidprintArray(int*arr,intlen){for(inti0;ilen;i){coutarr[i] ;}coutendl;}intmain(){intarr[10]{4,3,6,9,1,2,10,8,7,5};cout排序前数组元素为endl;printArray(arr,sizeof(arr)/sizeof(arr[0]));BubbleSort(arr,sizeof(arr)/sizeof(arr[0]));cout排序后数组元素为endl;printArray(arr,sizeof(arr)/sizeof(arr[0]));system(pause);return0;}