C++指针和引用

墨蓝 2023-10-18 08:58 142阅读 0赞

引用

是内存空间另外一个别名,相当于门牌号,可以用它来找到具体的内存空间。

  1. int i = 17;
  2. int &b = i;
  3. cout << b << endl;

指针

指针指向一块内存,它的内容是所指内存的地址

  1. int i = 17;
  2. int* p = &i; //指针
  3. cout << *p << endl;

引用和指针的区别

  1. 指针是一个实体,而引用仅是个别名;
  2. 引用使用时无需解引用(*),指针需要解引用;
  3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
  4. 引用没有 const,指针有 const,const 的指针不可变;
  5. 引用不能为空,指针可以为空;
  6. sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身(所指向的变量或对象的地址)的大小。
  7. 指针和引用的自增(++)运算意义不一样;

值交换

指针值交换

  1. void swap_1(int *a,int *b){
  2. int c = 0;
  3. c = *a;
  4. *a = *b;
  5. *b= c;
  6. }

引用值交换

  1. void swap_2(int &a,int &b){
  2. int c = 0;
  3. c = a;
  4. a = b;
  5. b = c;
  6. }
引用的主要功能:作为函数的参数或返回值
  1. struct Treacher{
  2. char* name;
  3. int age;
  4. };
  5. void myprint(Treacher &t){
  6. t.age = 21;
  7. cout << t.name << "," << t.age << endl;
  8. }

指针作为函数的参数或返回值就稍微要麻烦一些

  1. void myprint2(Treacher *t){
  2. t->age = 22;
  3. //(*t).age = 22; //和t->age相同
  4. cout << t->name << "," << t->age << endl;
  5. }

二级指针和指针引用

二级指针

  1. void getTeacher(Teacher **p){
  2. Teacher *tem = (Teacher *)malloc(sizeof(Teacher));
  3. tem->age = 20;
  4. *p = tem;
  5. }

指针引用,代替二级指针

  1. void getTreacher2(Treacher* &p){
  2. p = (Treacher *)malloc(sizeof(Treacher));
  3. p->age = 20;
  4. }

指针常量与常量指针

指针常量,指针的常量,不改变地址的指针,但可以修改指向的内容
常量指针,指向常量的指针,内容不能修改

  1. void main9(){
  2. //指针常量,指针的常量,不改变地址的指针,但可以修改指向的内容
  3. int a = 2, b = 3;
  4. int *const p1 = &a;
  5. //p1 = &b; //指针常量, 无法改变地址
  6. *p1 = 4; //可以这样改变
  7. //常量指针,指向常量的指针,内容不能修改
  8. const int *p2 = &a;
  9. p2 = &b; //可以这样改变
  10. //*p2 = 9; //常量指针,无法改变内容
  11. }

引用的大小

  1. struct Treacher{
  2. char* name;
  3. int age;
  4. };
  5. void main(){
  6. Treacher t;
  7. Treacher &t1 = t;
  8. Treacher *p = &t;
  9. cout << sizeof(t1) << endl; //引用是结构体内所有字段大小的综合 char* 4字节,int 4字节,总共8字节
  10. cout << sizeof(p) << endl; //指针是4
  11. system("pause");
  12. }

发表评论

表情:
评论列表 (有 0 条评论,142人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++指针引用

    引用 是内存空间另外一个别名,相当于门牌号,可以用它来找到具体的内存空间。 int i = 17; int &b = i; cout << b

    相关 C++: 21---引用指针

    一般说到谁和谁怎么样,要么说两者的相似点,要么两者的区别,这里我们也要说二者的区别和联系,同时,也不仅仅是区别和联系这么简单,因为你可能会发现在变量赋值,函数传参这两点还是有很

    相关 C++ 引用 指针区别

    引用很容易与指针混淆,它们之间有三个主要的不同: 不存在空引用。引用必须连接到一块合法的内存。 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任

    相关 C++指针引用

    1、取地址运算符、间接寻址运算符: & 取地址运算符,返回变量的内存地址(指针)。 \ 是间接寻址运算符(解引用),是 & 运算符的补充,返回变量所指定地址的