概念
指针就是一个用来存放地址的变量。
如何使用指针:可以通过解引用的方式来找到指针指向的内存。
指针前加* 代表解引用,可以找到指针中存放的地址内存中的数据。
指针所占内存空间
指针也是一种数据类型,他会占据一定的内存空间
int a=10;
int *p=&a;
//在32位操作系统下,指针是占4个字节空间大小,不管是什么数据类型的指针
//在64位操作系统下,指针是占8个字节空间大小
cout<<"整型数据指针所占内存空间大小"<<sizeof(p)<<endl;
cout<<"整型数据指针所占内存空间大小"<<sizeof(int*)<<endl;
cout<<"浮点型数据指针所占内存空间大小"<<sizeof(float*)<<endl;
cout<<"字符型数据指针所占内存空间大小"<<sizeof(char*)<<endl;
空指针NULL和野指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的(因为0~ 255之间的内存编号是系统占用的,因此不可以访问)
野指针:指针变量指向非法的内存空间
//野指针
//对16进制的数,强制转化成int型指针
int *p=(int*)0x1100
//会报错,因为p是野指针,0x1100地址不是我们申请的内存空间,因此我们对0x1100地址无访问权限
cout<<*p<<endl;
const修饰指针
const修饰指针有三种情况:
1、const修饰指针--- 常量指针
2、const修饰常量--- 指针常量
3、const既修饰指针,又修饰常量
int a=10,b=20,c=30;
//常量指针:在指针的前面加一个关键字const
//特点:指针的指向可以修改,但是指针指向的内存中的数据不可以改
const int* p=&a;
*p=20; //error,指针指向的内存中的数据不可以改
p=&b; //true,指针的指向可以修改
//指针常量:const修饰的是指针变量p,因此称为指针常量
//特点:指针的指向不可以改,指针指向的内存中的数据可以改
int* const p=&a;
*p=20; //true,指针指向的内存中的数据可以改
p=&b; //error,指针的指向不可以改
//特点:指针的指向和指针指向的值都不可以改
const int* const p=&a;
*p=20; //error
p=&b; //error
指针和函数
//封装一个函数,利用冒泡排序,实现对整型数组的升序排序
//例如数组 int arr[10]={4,5,7,2,3,9,1,5,8,9}
//若形参是指针,可以改变实参
void bubbleSort(int *arr,int length) //int *arr等价于 int arr[]
{
//arr[j] 等价于*(arr+j)
for(int i=0;i<lenght-1;i++){
for(int j=0;j<length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
int main(){
int arr[]={4,5,7,2,3,9,1,5,8,9};
int length=sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr,length);
for(int i=0;i<length;i++){
cout<<arr[i]<<endl;
}
}