C++学习笔记 第十二课 const,引用,指针

学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导

const什么时候为只读变量?什么时候是常量?

1.只有用字面量初始化的const常量才会进入符号表
2.使用其它变量初始化的const常量仍然是只读变量
3.被volatile修饰的const常量不会进入符号表

PS:在编译期间不能直接确定初始值的const标识符,都被作为只读变量处理
注意:const引用的类型与初始化变量的类型相同时,初始化变量称为只读变量,不同时生成一个新的只读变量,即使初始化变量的值变了,被初始化的引用因生成了一个新的只读变量而不会随之改变,如:

char c = ‘c’;
char& rc = c;
const int& trc = c;

rc = ‘a’;

printf(“c = %c\n”,c); //输出a
printf(“rc = %c\n”,rc);//输出a
printf(“trc = %c\n”,trc);//输出c,因char跟int不同类型,trc是一个独立于c的只读变量

关于引用和指针的疑问

1.指针是一个变量
(1)值为一个内存地址,不需要初始化,可以保存不同的地址
(2)通过指针可以访问对应内存地址中的值
(3)指针可以被const修饰成为常量或者只读变量
2.引用只是一个变量的新名字
(1)对引用的操作(赋值,取地址等)都会传递到代表的变量上
(2)const引用使其代表的变量具有只读属性
(3)引用必须在定义时初始化,之后无法代表其他变量。因为在编译器内部,使用指针常量来实现引用,所以必须在定义时初始化

引用要注意的问题
示例程序:

#include <stdio.h>

int a = 1;

struct SV
{
 int& x;
 int& y;
 int& z;
};


int main()
{
  int b = 2;
  int* pc = new int(3);
  SV sv = {a,b,*pc};//成功
  int& array[] = {a,b,*pc};//Error

  return 0;
}

Error的原因是,站在编译器的角度,因C++要兼容C语言,而在C语言中,*一个数组的地址是一片连续的内存空间,而a,b,pc的内存地址并不连续,所以编译失败。

发布了14 篇原创文章 · 获赞 0 · 访问量 96

猜你喜欢

转载自blog.csdn.net/u012321968/article/details/104450341