
一、指针的定义和使用。可以通过指针来保存地址。1.定义指针inta10//数据类型 *指针变量名int*p//让指针记录变量a的地址pa//让指针记录变量a的地址couta的地址为aendl;cout指针p为:pendl;/* 输出 0xa73b5ffb24 0xa73b5ffb24 */2.使用指针通过解引用的方式来找到指针指向的内存。*p就是在指针前面加一个星号就代表解引用指针前加星号代表解引用找到指针指向的内存中的数据。*P1000;coutaaendl;cout*P*pendl;intmain(){inta10;//数据类型 *指针变量名int*p;pa;*p1000;coutaendl;cout*pendl;}//输出a1000p1000//解引用#includeiostreamusingnamespacestd;intmain(){inta10;//数据类型 *指针变量名int*constpa;//指针常量可以改变指向元素的值//pa;*p10000;coutaendl;cout*pendl;}二、指针所占内存空间。在32位操作系统(x86架构中指针占用4个字节空间。在64位操作系统x64架构下指针占8个字节。inta10;//int *p;//Pa;int*pa#includeiostreamusingnamespacestd;intmain(){inta10;int*pa;cout*pendl;//*解引用coutsizeof(p)endl;coutsizeof(int*)endl;coutsizeof(char*)endl;coutsizeof(float*)endl;coutsizeof(double*)endl;}三、空指针1.空指针指针变量指向内存编号为0的空间。用途初始化指针变量。注意空指针指向的内存是不可访问的。0~255之间的内存编号是系统占用的因此不运行用户访问。//指针变量p指向内存地址编号为0的空间int*pnull;//访问空指针报错//内存编号0~255为系统占用内存不允许用户访问。cout*pendl;四、野指针野指针指针变量指向非法的内存空间。//指针变量p指向内存地址编号为0x1100的空间int*p(int*)0x1100//访问野指针报错cout*pendl;五、const修饰指针const修饰指针有三种情况1const修饰指针常量指针。特点指针的指向可以修改 但是指针指向的值是不可以改 。inta10;intb10;int*pa;constint*pa;*P20;//错误指针指向的值不可以改。pb;//正确指针指向可以改2const修饰常量指针常量。特点指针的指向指向不可以改指针指向的值可以改inta10;intb10;int*constpa;*P20;//正确指向的值可以改pb;//错误指针的指向不能改3const即修饰指针又修饰常量。特点指针的指向和指针指向的值都不可以改constint*constp3a;*p3100;//错误p3b;//错误六、指针和数组作用利用指针访问数组中的元素。#includeiostreamusingnamespacestd;intmain(){intarr[]{1,2,3,4,5,6,7,8,9};int*parr;//指向数组的指针cout第一个元素arr[0]endl;cout指针访问的第一个元素*pendl;for(inti0;i10;i){//利用指针遍历数组cout*pendl;;p;}return0;}七、指针和函数作用利用指针作函数参数可以修改实参的值//利用指针遍历数组#includeiostreamusingnamespacestd;//实现两个数字进行交换voidswap02(inta,intb){inttempa;ab;btemp;coutSWAP02 a bendl;}intmain(){//指针和函数//1.值传递inta10;intb20;swap02(a,b);couta bendl;//输出 SWAP02 20 10//10 20}voidswap03(int*p,int*q){inttmp*p;*p*q;*qtmp;}intmain(){//指针和函数//1.值传递inta10;intb20;//swap02(a,b);//地址传递//如果是地址传递可以修饰实参swap03(a,b);couta bendl;//输出 20 10}八、指针、数组、函数封装一个函数利用冒泡排序实现对整形数组的升序排序。数组int arr[10]{4,3,6,9,1,2,10,8,7,5}在数组或字符串的遍历循环中int j len - i - 1 通常用来定位从右往左倒数第 i 个元素的下标最常见的应用场景是双指针反转数组或冒泡排序。对称位置比如字符串反转和数组反转// 冒泡排序//指针配合数组和函数的用例#includeiostreamusingnamespacestd;//冒泡排序函数 参数1数组的首地址参数2数组的长度voidbubbleSort(int*arr,intlen){for(inti0;ilen-1;i){//第i轮for(intj0;jlen-i-1;j){// 内层循环从 0 开始到 len-i-1 结束从左边往右比较//第 1 轮从下标 0 一直比较到最后一个元素把全局最大的数推到了倒数第 1 位len - 1。if(arr[j]arr[j1]){inttemparr[j];arr[j]arr[j1];arr[j1]temp;}}}}voidprintArray(int*arr,intlen){for(inti0;ilen;i){coutarr[i]endl;}}intmain(){//1、先创建数组intarr[10]{4,3,6,9,1,2,10,8,7,5};//数组长度//数组的总内存大小 ÷ 单个元素占用的内存大小 元素的个数。intlensizeof(arr)/sizeof(arr[0]);//2.创建函数实现冒泡排序bubbleSort(arr,len);//3.打印排序后的数组printArray(arr,len);return0;}