01指针:
1、定义指针int a=10;
//指针定义的语法:数据类型*指针变量名;
int*p(point:指针);
//让指针记录变量a的地址
p=&a;
cout<<"a的地址为: “<< &a<<end1;//打印数据a的地址
cout<<"指针a为: "<<p<<end1;//打印指针变量p
2、使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用,找到指针指向的内存中的数据
*p=1000;
cout<<"a= "<<a<<end1;
cout<<"*p= "<<*p<<end1;
指针的用途:通过p能找到这个内存,*p可以修改这个内存;指针可以间接的来访问这篇内存,并且对其进行读和写的操作;
02指针:
//指针所占内存空间
int a=10;
//int*p;
//p=&a;
int*p=&a;(与前两行所代表的意思相同)
//在32位操作系统下,指针是占4个字节空间大小,不管是什么数据类型
//在64位操作系统下,指针是占8个字节空间大小
cout<<"sizeof(int*)="<<sizeof(p或int*)<<end1;
cout<<"sizeof(int*)="<<sizeof(float*)<<end1;
cout<<"sizeof(int*)="<<sizeof(double*)<<end1;
cout<<"sizeof(int*)="<<sizeof(char*)<<end1;
03指针:
空指针(nullptr):指针变量指向内存中编号为0的空间
用途:初始化指针变量(空指针指向的内存是不可以访问的)
int*p=NULL;
//0-255之间的内存编号是系统占用的,因此不可以访问
04指针
野指针:指针变量指向非法的内存空间
在程序中,尽量避免出现野指针
int*p=(int*)0x1100;
cout<<*p<<end1;(读取访问权限冲突)
总结:空指针和野指针都不是我们申请的空间,因此不要访问。
const(常量)修饰指针
int a=10;
int b=10;
int*p=&a;
1、const修饰指针---常量指针
const int*p=&a;(这是一个常量指针)
常量指针特点:指针的指向可以修改,但是指针指向的值不可以修改
*p=20;错误:指针指向的值不可以改
p=&b;正确:指针指向可以改
2、const修饰常量---指针常量
int*const p=&a;(这是一个指针常量)
指针常量特点:指针的指向不可以改,指针指向的值可以改
*p=20;正确:指向的值可以改
p=&b;错误:指针指向不可以改
3、const即修饰指针,又修饰常量
const int*(指针)const p(常量)=&a;
特点:指针的指向和指针指向的值都不可以改
*p=20//错误
p=&b//错误
指针和数组
作用:利用指针访问数组中的元素
int arr[10]={1,2,3,4,5,6,7,8,9,10};
cout<<"第一个元素为: “<<arr[0]<<end1;
int*p=arr;//arr数组名就是数组的首地址
cout<<"利用指针来访问第一个元素: "<<*p<<end1;
p++;//让指针向后移4个字节
cout<<"利用指针来访问第二个元素:"<<*p<<end1;
cout<<"利用指针遍历数组"<<end1;
int*p2=arr;
for(int i=0;i<10;i++)
{
//cout<<arr[i]<<end1;
cout<<*p2<<end1;
p2++;
}
指针和函数
作用:利用指针作函数参数,可以修改该实参的值//实现两个数字进行交换
viod swap01(int a,int b)
{
int temp=a;
a=b;
b=temp;
cout<<"swap01a="<<a<<end1;
cout<<"swap02b="<<b<<end1;
}
//1、值传递(将值进行传递)不会改变实参的值
int a=10;
int b=20;
swap01(a,b);
cout<<"a="<<a<<end1;
cout<<"b="<<b<<end1;
//2、地址传递(用指针将地址进行传递)
//如果是地址传递,可以改变实参 的值
viod swap02(int*p1,int*p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
int main()
{
int a=10;
int b=20;
swap02(&a,&b);
cout<<"a="<<a<<end1;
cout<<"b="<<b<<end1;
}
总结:如果不想修改实参,就用值传递;如果想修改实参,就用地址传递
指针、数组、函数
案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
//冒泡排序函数 参数1:数组的首地址;参数2:数组长度
viod bubbleSort(int*arr,int len)
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
//如果j>j+i的值则交换数字
if(arr[j]>arr[j+1])
{
int temp=arr[i];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
|
}
}
//打印数组
viodprintArray(int*arr,int len)
{
for(int i=0;i<len;i++)
{
cout<<arr[i[<<end1;
}
}
int main(){
//1、先创建数组
int arr[10]={4,3,6,9,1,2,10,8,7,5}
//数组长度
int len=sizeof(arr)/sizeof(arr[0]);
//2、创建函数,实现冒泡排序
bubbleSort(arr,len);
//3、打印排序后的数组
printArray(arr,len);
system("puase");
return 0;
}