C语言基础-操作符、运算符
操作符、运算符(内置的最基础的函数,本地运行)
单目
& 取地址(通用),引用/换名(C++)
取地址:
&变量名(返回变量的内存地址,int类型)
引用:
Elemtype &a=变量名;
(将Elemtype类型的变量名换名/引用 为a变量)
声明引用时必须指定它代表的是哪一个变量,即对它初始化。
int b;
int &a=b; //声明a是变量b的引用
引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储单元
sizeof (data type):判断变量(包括自定义类型)所占的字节大小。
若已初始化或固定了长度,sizeof 在编译时计算缓冲区的长度都是不变的,不能用来返回动态分配的内存空间。
若参数为字符数组,则返回长度包括结束字符 null(即’\0’)。
返回无符号数unsigned。
不能对结构体中的位域成员使用sizeof
char ch[4]="123"; //字符数组,留一个位置给终止符'\0'
for(int i=0;i<4;i++)
cout<<ch[i]; //输出123,终止符输出为空格
cout<<sizeof(ch);//输出4,包括结束符'\0'。即使再更改ch数组,sizeof也不会再更改
new/delete(C++运算符):申请、释放动态内存
内部数据类型是编译器本来就认识的,不需要用户自己定义,如int,char,double
非内部数据类型不是编译器本来就认识的,需要用户自己定义才能让编译器识别,如enum,union,class、struct
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete.
由于内部数据类型的“对象”没有构造与析构的过程,与malloc/free等价
C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
new/delete必须配对使用,malloc/free也一样
双目:&、||
三目
?:表达式 ? 表达式 : 表达式 ;
x < 0 ? y = 10 : z = 20;
等同于
if (x < 0)
y = 10;
else
z = 20;