指针的作用:可以通过指针间接访问内存
指针变量定义的语法:数据类型 * 变量名;
int a=10;
//1.定义指针
//指针定义语法: 数据类型 * 指针变量名;
int * p;
p = &a;
//上两行可省略为 int * p = &a;
cout<<"a的地址为: "<<&a<<endl;
cout<<"指针p为: "<<p<<endl;
//2.使用指针
//可以通过解引用的操作使用数据
//指针前加 * 代表解引用,找到指针指向内存中的数据
*p = 1000;
cout<<"a= "<<a<<endl;
cout<<"*p= "<<*p<<endl;
//即*p与a等价,更改*p后a也随之更改 指针所占内存空间
int a=10;
int * p = &a;
cout<<"sizeof(int *)= "<<sizeof(int *)<<endl;//int* double* char* 等都为四个字节
//指针在32位操作系统下都为四个字节,64位下占八个字节 空指针与野指针
空指针:指针指向内存中编号为0的空间;
用途:初始化指针
注意:空指针指向的内存是不可以访问的;
//指针p指向内存编号为0的空间
int * p = NULL;
//访问空指针会报错
cout<<*p<<endl;
//内存编号0——255为系统占用内存,不允许用户访问 野指针:指针指向非法的内存空间(即没有定义的内存)
//指针p指向内存地址编号为0x1100的空间
int * p = (int *)0x1100;
//访问野指针报错
cout<<*P<<endl; 程序中尽量避免出现野指针!
const修饰指针
const修饰指针 ——常量指针
//const修饰的是指针,指针指向可以改,指向的值不可以改
int a=10,b=100;
const int * p = &a;
p = &b;//正确
*p = 1000;//报错 const修饰常量 ——指针常量
//const修饰的是常量,指针指向不可以改,指向的值可以改
int a=10,b=100;
int * const p = &a;
p = &b;//错误
*p = 1000;//正确 const即修饰指针,又修饰常量
//const即修饰指针又修饰常量,指向与指向的值都不可以改
int a=10,b=100;
const int * const p = &a;
p = &b;//错误
*p = 1000;//错误 指针在数组中的应用
利用指针访问数组中的元素
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int * p = arr;//指向数组的指针
cout<<"第一个元素: "<<arr[0]<<endl;
cout<<"指针访问第一个元素: "<<*p<<endl;
for(int i=0;i<10;i++){
//利用指针遍历数组
cout<<*p<<endl;
p++;
}
//p++并非地址+1,而是地址+4,因为int类型占4个字节 指针和函数
作用:利用指针作函数参数,可以修改实参的值
void swap(int * p1,int * p2){
int temp = * p1;
*p1=*p2;
*p2=temp;
}
int main(){
swap(&a,&b);//也称为地址传递
return 0;
} 
京公网安备 11010502036488号