ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++基础——指针与引用

2022-05-17 17:02:31  阅读:31  来源: 互联网

标签:const int eg 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

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有