P56-P63:指针
2026/8/8 8:07:44 网站建设 项目流程

一、指针的定义和使用。

可以通过指针来保存地址。

1.定义指针

inta=10//数据类型 *指针变量名int*p;//让指针记录变量a的地址p=&a;//让指针记录变量a的地址cout<<"a的地址为:"<<&a<<endl;cout<<"指针p为:"<<p<<endl;/* 输出 0xa73b5ffb24 0xa73b5ffb24 */

2.使用指针
通过解引用的方式来找到指针指向的内存。
*p(就是在指针前面加一个星号就代表解引用)
指针前加星号代表解引用,找到指针指向的内存中的数据。

*P=1000;cout<<"a="<<a<<endl;cout<<"*P="<<*p<<endl;
intmain(){inta=10;//数据类型 *指针变量名int*p;p=&a;*p=1000;cout<<a<<endl;cout<<*p<<endl;}//输出a=1000,p=1000
//解引用#include<iostream>usingnamespacestd;intmain(){inta=10;//数据类型 *指针变量名int*constp=&a;//指针常量,可以改变指向元素的值//p=&a;*p=10000;cout<<a<<endl;cout<<*p<<endl;}

二、指针所占内存空间。

在32位操作系统(x86架构)中,指针占用4个字节空间。在64位操作系统(x64架构)下,指针占8个字节。

inta=10;//int *p;//P=&a;int*p=&a
#include<iostream>usingnamespacestd;intmain(){inta=10;int*p=&a;cout<<*p<<endl;//*解引用cout<<sizeof(p)<<endl;cout<<sizeof(int*)<<endl;cout<<sizeof(char*)<<endl;cout<<sizeof(float*)<<endl;cout<<sizeof(double*)<<endl;}

三、空指针

1.空指针:指针变量指向内存编号为0的空间。
用途:初始化指针变量。
注意:空指针指向的内存是不可访问的。
0~255之间的内存编号是系统占用的,因此不运行用户访问。

//指针变量p指向内存地址编号为0的空间int*p=null;//访问空指针报错//内存编号0~255为系统占用内存,不允许用户访问。cout<<*p<<endl;

四、野指针

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

//指针变量p指向内存地址编号为0x1100的空间int*p=(int*)0x1100//访问野指针报错cout<<*p<<endl;

五、const修饰指针

const修饰指针有三种情况:
(1)const修饰指针:常量指针。
特点:指针的指向可以修改 ,但是指针指向的值是不可以改 。

inta=10;intb=10;int*p=&a;
constint*p=&a;*P=20;//错误,指针指向的值不可以改。p=&b;//正确,指针指向可以改

(2)const修饰常量:指针常量。
特点:指针的指向指向不可以改,指针指向的值可以改

inta=10;intb=10;int*constp=&a;*P=20;//正确,指向的值可以改p=&b;//错误,指针的指向不能改

(3)const即修饰指针,又修饰常量。
特点:指针的指向和指针指向的值都不可以改

constint*constp3=&a;*p3=100;//错误p3=&b;//错误

六、指针和数组

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

#include<iostream>usingnamespacestd;intmain(){intarr[]={1,2,3,4,5,6,7,8,9};int*p=arr;//指向数组的指针cout<<"第一个元素:"<<arr[0]<<endl;cout<<"指针访问的第一个元素:"<<*p<<endl;for(inti=0;i<10;i++){//利用指针遍历数组cout<<*p<<endl;;p++;}return0;}

七、指针和函数

作用:利用指针作函数参数,可以修改实参的值

//利用指针遍历数组#include<iostream>usingnamespacestd;//实现两个数字进行交换voidswap02(inta,intb){inttemp=a;a=b;b=temp;cout<<"SWAP02 "<<a<<" "<<b<<endl;}intmain(){//指针和函数//1.值传递inta=10;intb=20;swap02(a,b);cout<<a<<" "<<b<<endl;//输出 SWAP02 20 10//10 20}
voidswap03(int*p,int*q){inttmp=*p;*p=*q;*q=tmp;}intmain(){//指针和函数//1.值传递inta=10;intb=20;//swap02(a,b);//地址传递//如果是地址传递,可以修饰实参swap03(&a,&b);cout<<a<<" "<<b<<endl;//输出 20 10}

八、指针、数组、函数

封装一个函数,利用冒泡排序,实现对整形数组的升序排序。
数组:
int arr[10]={4,3,6,9,1,2,10,8,7,5}
在数组或字符串的遍历循环中,int j = len - i - 1 通常用来定位从右往左(倒数)第 i 个元素的下标,最常见的应用场景是双指针反转数组或冒泡排序。(对称位置,比如字符串反转和数组反转)

// 冒泡排序//指针配合数组和函数的用例#include<iostream>usingnamespacestd;//冒泡排序函数 参数1:数组的首地址;参数2:数组的长度voidbubbleSort(int*arr,intlen){for(inti=0;i<len-1;i++){//第i轮for(intj=0;j<len-i-1;j++){// 内层循环:从 0 开始,到 len-i-1 结束,从左边往右比较//第 1 轮:从下标 0 一直比较到最后一个元素,把全局最大的数推到了倒数第 1 位(len - 1)。if(arr[j]>arr[j+1]){inttemp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}voidprintArray(int*arr,intlen){for(inti=0;i<len;i++){cout<<arr[i]<<endl;}}intmain(){//1、先创建数组intarr[10]={4,3,6,9,1,2,10,8,7,5};//数组长度//数组的总内存大小 ÷ 单个元素占用的内存大小 = 元素的个数。intlen=sizeof(arr)/sizeof(arr[0]);//2.创建函数,实现冒泡排序bubbleSort(arr,len);//3.打印排序后的数组printArray(arr,len);return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询