1. 指针的作用:可以通过指针间接访问内存

  1. 指针变量定义的语法:数据类型 * 变量名;

    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也随之更改
  1. 指针所占内存空间

    int a=10;
    int * p = &a;
    cout<<"sizeof(int *)= "<<sizeof(int *)<<endl;//int* double* char* 等都为四个字节
    //指针在32位操作系统下都为四个字节,64位下占八个字节
  1. 空指针与野指针

空指针:指针指向内存中编号为0的空间;

用途:初始化指针

注意:空指针指向的内存是不可以访问的;

//指针p指向内存编号为0的空间
int * p = NULL;
//访问空指针会报错
cout<<*p<<endl;
//内存编号0——255为系统占用内存,不允许用户访问

野指针:指针指向非法的内存空间(即没有定义的内存)

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

程序中尽量避免出现野指针!

  1. 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;//错误
  1. 指针在数组中的应用

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

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个字节
  1. 指针和函数

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

void swap(int * p1,int * p2){
int temp = * p1;
*p1=*p2;
*p2=temp;
}
int main(){
    swap(&a,&b);//也称为地址传递
    return 0;
}