C++ 一些笔记

时间:2022-05-30 02:26:54

1、指针、引用和const

 int i=;
int &a = i;
int *p ;
int *&r=p;//r是对指针的引用
r=&i;//实质上是将p指向i
*r=;//实质上是将i的值变为0;
a =;

引用实质上是对变量起个别名,它本身不是一个对象,只是与初始值绑在一起。因此他定义的时候必须初始化,且不能更换到其他对象,也不存在引用的引用。普通的“非常量引用“只能引用一个对象,不能引用一个常量,用const限定的“常量引用”可以引用一个常量,也可以引用一个普通变量。(这里“常量引用”只是一个对const的引用的简称,实际上不存在常量引用,因为引用不是一个对象)

 int i =;
const int &a = i;
i = ;//这句话是对的。并且a的值也会跟着变了
a =//这句话是错的。
cout<<a;

指针本身是一个对象,因此可以复制和赋值,且可以指向不同的对象,指针定义的时候可以不初始化,也就是可以为空。可以有指向指针的指针。

存在指针的引用 ,不存在指向引用的指针。 指针是一个对象因此存在常量指针。如下:

const int *p = &i;//指向常量的指针
int const *p = &i;//效果上面一样
int *const q = &i;//常量指针 *p = ;//错误,p指向的是常量不能更改。
p = &c;//正确,p的地址可以换
*q = ;//正确
q = &c;//错误,p的地址不能更改。

 2、指针形参,数组形参,引用形参

指针的行为跟其他非引用类型一样,当执行指针拷贝操作时,拷贝的是指针的值,拷贝之后两个指针不是一个指针。

 void fun(int *p){
*p=;
p=;
} int i =;
int *p = &i;
cout<<p<<endl<<*p<<endl;
fun(p);
cout<<i<<endl<<p<<endl<<*p;

输出结果

C++ 一些笔记

可以看出指针的值改变了,但是指针本身没有改变。

引用形参,其实就是一个引用,操作的还是其本身,因此在函数中改变其值,函数外也改变。因为都是自己。

数组形参,不允许拷贝数组,数组将转换成指针。我们实际上传递的是数组首元素的指针。

2、extern 和 static、const