指针
源自:最详细的讲解C++中指针的使用方法(通俗易懂)_c++指针-CSDN博客
入门:
指针就是内存地址,指针变量就是用来存放内存地址编码(计算机将内存换分为一个一个的字节,然后为每一个字节分配唯一的编码)的变量,不同类型的指针变量所占用的存储单元长度是相同的。
int* p = &a;
指针的const限定
写法:const 指向类型 *指针变量/ 指向类型 const *指针变量(const 在*前面)【表示不能通过指针修改被指向变量的值】
1.不能把一个const变量的地址 赋给一个 非const对象的指针
const double pi = 3.14;
double* ptr = π//错误,ptr是非const所指向的变量
const double* cptr = π//正确,cptr是const指针变量
2.允许把非const对象的地址 赋给指向const对象的指针,不能使用指向const对象的指针修改指向对象,然而如果该指针指向的是一个非const对象,可以用其他方法修改其所指向的对象
const double pi = 3.14;
const double* cptrf = π//正确
double f = 3.14;//f是double类型(非const类型)
cptr = &f;//正确,允许将f的地址赋给cptrf
f = 1.68;//正确,允许修改f的值
*cptrf = 10.3;//错误不能通过引用cptr修改f的值
3.实际编程过程中,指向const的指针常用作函数的形参,以此确保传递给函数的参数对象在函数中不能被修改
void fun(const int* p)
{
...
}
int main()
{
int a;
fun(&a);
}
指针作为函数的形参,在主函数中,我们定义整形变量a然后将a的地址传递给了子函数,对于子函数来说,
他的形参就是用const修饰过 的整型变量p指向主函数里a这个变量
这样的一系列操作就使得我们不能在子函数中通过p间接引用a 来改变a 的值,因为a 是用const修饰过的作就使得我们不能在子函数中通过p间接引用a 来改变a 的值,因为a 是用const修饰过的
summary:非const指针限定的指针不能指向const变量;const指针限定的指针不能使用*p修改被指向的值
const指针
指针类型* const 指针变量, ...;【const在*后】
int a = 10, b = 20;
int* const pc = &a;//pc是const指针
pc = &b;//错误pc 是只读的
pc = pc;//错误pc是只读的
pc++;//错误pc是只读的
*pc = 100;//正确,a被修改
数组/字符串
见文章最详细的讲解C++中指针的使用方法(通俗易懂)_c++指针-CSDN博客
结构体指针
C++死磕基础之指针篇(四)--结构体指针的定义以及使用_结构体指针如何定义和使用-CSDN博客
vector
一维数组
详见:C++ vector 容器 | 菜鸟教程 (runoob.com)