C++基础——指针与引用
作者:互联网
指针
作用:通过指针间接访问内存
语法:数据类型 * 变量名;
所占内存大小:一般32位系统4字节,64位系统8字节
eg:
int a = 10;
int * p = &a;
解引用:*P
找到p指针指向的内存,即a
const修饰指针:
- 常量指针(const修饰常量)——
const int * p = &a;//指针指向可以改,指针指向的值不能改,相当于是const *p,而*p=a
- 指针常量(const修饰指针)——
int * const p = &a;//指针指向不可以改,指针指向的值可以改,即const是修饰指针指向的地址
- const修饰指针和常量——
const int * const p = &a;//指针指向和指向的值都不能改
参数传递
1、值传递:普通的参数传递,形参不会影响实参
eg:
void swap(a, b) {
int temp = a;
a = b;
b = a; //a、b形参交换
}
int main() {
int a = 1;
int b = 1;
swap(a, b); //此时a、b实参不会交换
return 0;
}
2、地址传递:形参为指针,传递的是实参的地址,形参会影响实参
eg:
void swap(int * a, int * b) {
int temp = a;
a = b;
b = a; //a、b形参交换
}
int main() {
int a = 1;
int b = 1;
swap(&a, &b); //此时a、b实参也会交换
return 0;
}
注意数组传递的时候直接传数组名arr,接收也用数据类型 * 数组名
,因为数组名本身就是首地址
引用
引用就是给变量起别名,本质是指针常量,引用必须要初始化,初始化后不可以改变
eg:
int a = 10;
int c = 20;
int &b = a;
b = c; //这里是赋值操作,不是修改引用,即a的值被修改成了c的值
引用传递
eg:
void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 1;
int b = 2;
swap(a, b); //引用传递,形参会影响实参
return 0;
}
总结:引用传递与地址传递的效果相同,但是引用传递语法简单。
注意:不要返回局部变量引用,除非是用static修饰的静态变量,函数返回静态变量的引用,此时函数调用可以作为左值。
常量引用
使用场景1:加上const后,编译器将代码自己补全,
eg:const int & ref = 10;//编译器修改:int temp = 10; const int & ref = temp;
加了const变为只读,不能修改值。
使用场景2:用来修饰形参,防止误操作
eg:
void printValue(const int &a){ //加const后不能对参数进行修改
cout << a << endl;
}
int main() {
int a = 10;
printValue(a);
return 0;
}
总结
引用本质上是指针常量,但是用法上更简单,与普通变量用法无异。
引用传递可以优化传递内存大小,尤其是实参数据量大时,要多采用引用传递;在不希望数据被改变时,多用常量引用。
标签:const,int,eg,C++,引用,实参,指针 来源: https://www.cnblogs.com/Stella77/p/16281478.html