C++指针理解
学习C++ 过程中指针一直是个难点,为了强化自己对其的理解,于此记录
指针的实质
了解指针之前,需要了解CPU如何找到需要的数据:
- CPU给出数据地址,32位机器会给出32位的地址,64位机器会给出64位地址。
- 找到此地址对应的内存块,取出相应的数据;
在C++中,如果声明一个变量,需要使用一个标识符,该标识符绑定了此变量的数据类型、对应的内存空间地址。
有了上述了解之后,可以有下面结论:
- 声明一个指针和声明一个变量是相同的:绑定数据类型、分配内存空间
- 给指针分配的是一个4或8字节的空间
- 指针的类型是为了确定间址时读取数据块的大小
结论 指针仍是一个变量,只不过此变量保存的是另一个变量的地址
指针的工作原理
可以看下面一段代码:
int a = 1;
int* p = &a; //a取地址后,将地址赋给指针p
cout << *p << " " << a << endl;
char* c = (char*) p; //将指针p强制转换为char型的指针
cout << *c << " " << *p << endl;
输出为:
1 1
1
可以看到当使用指针获取一个变量时,会根据指针的类型来获取不同的空间,当为int时,间址时读取四个字节的内容,当为char 时会获取1个字节的内容。
指针的应用
- 应用于复杂的数据结构,例如: 使用指针来实现链表
- 函数参数的传递,有时使用指针传参可以减少内存的开销
- 动态内存分配