C++学习(3)——指针
1. 指针所占内存空间
在32位操作系统下,占用4个字节,64位下占8个字节
2. 空指针与野指针
-
空指针:指针变量指向内存中编号为0的空间
-
用途:初始化指针变量
-
注意:空指针指向的内存量是不可以访问的
0~255之间的内存编号是系统占用的,因此不可以访问
int *p = NULL; cout << *p << endl; //访问会报错
-
-
野指针:指针变量指向非法的内存空间
int *p = (int *)0x1100;
-
空指针与野指针都不是我们申请的空间,因此不要访问
3. const修饰指针
const修饰指针有三种情况:
- const修饰指针——常量指针
- const修饰常量——指针常量
- const既修饰指针,又修饰常量
-
const修饰指针——常量指针
int a = 10; const int *p = &a;
特点:指针的指向可以修改,但是指针指向的值不可以修改
*p = 20; //× int b = 20; p = &b; //√
-
const修饰常量——指针常量
int a = 10; int * const p = &a;
特点:指针的指向不可以改,指针指向的值可以改
*p = 20; //√ int b = 20; p = &b; //×
-
const既修饰指针,又修饰常量
int a = 10; const int * const p = &a;
特点:指针的指向和指针指向的值都不可以修改
*p = 20; //× int b = 20; p = &b; //×
4. 指针和数组
利用指针访问数组中的数据
int arr[3] = {1,2,3};
int *p = arr;
/* 此时*p==arr[0] */
//数组在内存中的空间是连续的,可以通过指针自加访问下一元素
p++;
/* 此时*p==arr[1] */
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.