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 = 10else
    z = 20;



发布了46 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41850194/article/details/105315858
今日推荐