- P56. 指针——指针的定义和使用
- P57. 指针——指针所占内存空间
- P58. 指针——空指针
- P59. 指针——野指针
- P60. 指针——const修饰指针
- P61. 指针——指针和数组
- P62. 指针——指针和函数
- P56. 指针的定义和使用
指针的作用:可以通过指针间接访问内存
指针定义语法:
数据类型 * 指针变量名;
1 int main() 2 { 3 int a = 10; 4 //定义指针 5 int* p; 6 //让指针记录变量a的地址 7 p = &a; 8 cout << "a的地址为:" << &a << endl; 9 cout << "p为:" << p << endl; 10 //使用指针 11 //可以通过解引用的方式来找到指针指向的内存 12 //指针前加 * 代表解引用,找到指针指向的内存中的数据 13 *p = 1000; 14 cout << "a = " << a << endl; 15 cout << "*p = " << *p << endl; 16 return 0; 17 }
运行结果:
- P57. 指针所占内存空间
- int a = 10;
int * p;
p = &a;
等价于
int * p = &a;
- 在32位操作系统下,任何类型的指针都占4个字节大小;在64位操作系统下,指针占8个字节大小。
- P58. 空指针
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量(指针一开始不知道指向哪好,那就指向这)
注意:空指针指向的内存是不可以访问的
int * p = NULL;
- P59. 野指针
野指针:指针变量指向非法的内存空间
总结:空指针和野指针都不是我们申请的空间,因此不要访问。
- P60. const修饰指针
- const修饰指针有三种情况:
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; //错误
- P61. 指针和数组
1 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; 2 int* p = arr; //arr就是数组的首地址 3 cout << "*p = " << *p << endl; //数组第 1 个元素的值 4 cout << "p = " << (int)p << endl; 5 p++; 6 //弹幕:在C++中,当给一个指针添加一个值的时候,实际上添加的值是把这个值乘以指针引用的数据类型的大小。 7 cout << "p = " << (int)p << endl; //运行之后可以看到"p++"实际p+4 8 cout << "*p = " << *p << endl; //数组第 2 个元素的值 9 p = p + 2; 10 cout << "p = " << (int)p << endl; 11 cout << "*p = " << *p << endl; //数组第 4 个元素的值
运行结果:
- P62. 指针和函数
作用:利用指针作函数参数,可以修改实参的值
1 //值传递 2 void swap01(int a, int b) 3 { 4 int temp = a; 5 a = b; 6 b = temp; 7 cout << "swap01 a = " << a << endl; 8 cout << "swap01 b = " << b << endl; 9 } 10 //地址传递 11 void swap02(int* p1, int* p2) 12 { 13 int temp = *p1; 14 *p1 = *p2; 15 *p2 = temp; 16 cout << "swap02 *p1 = " << *p1 << endl; 17 cout << "swap02 *p2 = " << *p2 << endl; 18 } 19 20 int main() 21 { 22 int a = 10; 23 int b = 20; 24 //值传递不会改变实参 25 swap01(a, b); 26 cout << "a = " << a << endl; 27 cout << "b = " << b << endl; 28 //地址传递会改变实参 29 swap02(&a, &b); 30 cout << "a = " << a << endl; 31 cout << "b = " << b << endl; 32 return 0; 33 }
运行结果:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
标签:const,指向,int,C++,62,修饰,P56,指针 From: https://www.cnblogs.com/wjjgame/p/17249776.html