一言以蔽之: 指针能间接的访问变量的内存,进行读和写的操作。
定义指针
数据类型 * 指针变量名
int a = 0;
int * p; //定义指针
p = &a; //指针记录变量a的地址
使用指针
可以通过解引用的方式来找到指针指向的内容
指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000; //这段代码会把 a 变量里的值也修改
cout << *p << endl;//访问a的数据
指针所占内存空间
32位操作系统:占4个字节空间
64位操作系统:占8个字节空间
cout << sizeof(int *) << endl;
空指针和野指针
空指针和野指针都不是我们申请的空间,因此不能访问
空指针
定义:指针变量指向内存中编号为0的空间。
用途:初始化指针变量。
注意:空指针指向的内存是不可以访问的。
0~255之间的内存编号是系统占用的,因此不可访问
int * p = NULL;
*p = 100;//空指针不可访问, nullptr
野指针
定义:指针变量指向非法的内存空间
内存地址没有申请是不可以访问的!!!
int * p = (int *)0x1100;
cout << *p << endl;
const修饰指针
const修饰指针有三种情况:
1,const修饰指针——常量指针
2,const修饰常量——指针常量
3,const既修饰指针,又修饰常量
1,常量指针(const int * p = &a)
指针的指向可以修改,但是指针指向的值不可以修改
int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//错误,指针的值不可以改
p = &b;//正确,指针指向可以改
2,指针常量(int * const p = &a)
值可以改,但是指向不可以改
int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//正确,指针的值可以改
p = &b;//错误,指针的指向不可以改
3,const既修饰指针,又修饰常量
指针的指向和值都不可以修改
int a = 10;
int b = 20;
const int * p = &a;
*p = 20;//错误,指针的值不可以改
p = &b;//错误,指针的指向不可以改
指针和数组
指针在数组中利用+1可以进行偏移。
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int * p = arr;
for (int i = 0; i<10; i++) {
cout << *p << endl;
*p++;
}
指针和函数
利用指针可以做地址传递
void swap(int * a,int * b){
int temp = *a;
int *a = *b;
int *b = temp;
}
int a = 10;
int b = 20;
swap(&a,&b);
网友评论