变量声明类似初始化,注意声明范围,局部变量和全局变量,数组为组合类型
scanf:输入,淘汰不安全,%x:ASCLL码值类型,%s,数组类型
scanf_s(“%s”,&str ,10),输入数组,设定大小输入
memset():按大小设定变量,_s设定范围更多参考帮助c语言中文网 http://c.biancheng.net/cpp/biancheng/cpp/rumen_13/
;c中变量和c++中变量声明,c为暂存于变量名中,c++直接替换&取地址符作用于此
cin,cout:常规,键盘输入输出,不可有空格,>>,<<提取符
cout< CUP寄存器:eax,edx,ecx等意义? EAX寄存器以称为累加器,AX寄存器是算术运算的主要寄存器,所有的输入、输出只使用十六进制AL或AX作为数据寄存器 ECX:计数暂存器, 重复(REP)前缀指令和LOOP指令的内定计数器 EDX:资料暂存器 ,例如放整数除法产生的余数 宏定义,有无区分C++与c const与指针(指向) 封锁:int* const p1 = &a;//指向为常性,封锁指向能力,只能读常,指向能力形同于安全性 *:int *p=10; 释放指针只是释放指向关系——>失效指针——>释放后指向空避免(空指针) 野指针——>未声明指针 &:万能引用const int &c=a,指针需要断言,引用不用(多叠加从右往左解释,引用非类型,故可*****&,而&*非法),相当于*****const 特点:(1)、定义引用必须初始化,(2)、没有空引用,(3)、没有二级引用 引用同一个对象同义,故无二级 区别: 语法上:指针存储实体类型数据,引用为实体别名 程序中:指针需分配空间,引用不用 解引:指针使用需声明,引用不用 指针可以改变值,而引用不行——>指针可为NULL,引用不行 形参使用时,指针需断言,引用不用 sizeof(),参为指针时为指针变量大小,引用为原数据大小 指针无上限,引用只有一级(特点) 对引用操作会影响实体 函数中局部变量和对象无法以引用或指针返回 内联函数:将函数定义为内联函数,内联到别的位置,以空间节省时间(优化建议,声明和定义同时使用,避免链接错误),简单函数多次使用 与宏区别: (1)、内联在编译展开,宏在预编译 (2)、内联函数嵌在目标代码中,带参宏为简单文本替换 (3)、内联函数有类型检测等功能,宏只是替换 声明时函数定义给形参缺省值(即给参数默认值获返回值的函数,从右往左,int(),int{}相当于0,不可调用声明默认值,形参名可省略),调用用实参会顶替默认值 c++可以令函数同名,只要参数个数不同,或者类型不同即可(参数表不同),调用是会自动匹配 返回类型不能作为函数重载的根据,重载给缺省值会导致二义性,const只有指向能用作形参 值型: 左值lvalue:有名称有地址 右值rvalue:无地址,&&引用右值,int &&r=10 将亡值xvalue: 值型重载 编译时,用由函数名,参数,返回类型,类名,调用约定等共同决定的修士们标识函数 c只会_stdcall是api用栈的方式处理 宏测定判断,#ifdef_cplusplus extern可定义为为c编写 创造函数模板用来简化函数重载实现函数重用,生成实现代码的代码,是规则的重定义,非宏替换 temple<模板参数表> 返回类型 函数名(形式参数表) { } c++三域:局部域,名字空间(相当于全局域),类域 namespace 空间名 //全局名字空间域(文件域) { 声明块 } 防止全局实体名冲突,命名冲突 注意可分层嵌套,起屏蔽作用,多文件多个同名最后合成到同一个命名空间内 使用:引入using namespace 名字空间 成员使用:using 被限定修饰的名字空间::类名::函数名(逐层) 作用域限定符使用::: using cc=char[3];相当于typedef char[3] cc;查类型重命名? typedef将合法变量定义为类型 using可和模板配合 temple using array =T[N] arrray array 栈区:存放形参,局部变量等地址向下增长 堆区:程序动态内存分配向上增长 栈堆区别? 1、栈是系统自动分配,速度快,堆需要用户自己分配,速度较慢 2、栈申请指定空间不足会报异常,然后申请失败,堆区会将多余部分自动放入空闲位置 3、栈区申请连续内存,大小固定,堆区申请不连续,虚拟空间,获取空间大 4、栈,主函数下第一个命令地址入栈,堆先存大小 int *a=(int *) malloc (sizeof(int)); a=(int *)realloc(p,sizeof(int)n10)要释放原空间所以—— int *a=realloc(p,sizeof(int)n10 动态内存管理:new:(1)、作为运算符使用 new会自动计算大小并分配, int *p=new int(10); int ip=new int[10];相当于new(ip) int****[10] 对应释放空间delete,一组数据前加[],delete []ip; int *w=new(nothrow) int[10];可阻止运行异常,默认成所分配内容均为NULL,初始化,返回地址 (2)、函数使用 int *a=(int *)::operator new(sizeof(int));相当于(int *)malloc(sizeof(int)) (int *)::operator new(sizeof(int),nothrow);对应:: operation delete (3)、定位 (placement new expression) new(a) int(10);不申请追加,容易越界 内置类型可混用 auto:初始化时,可编译时自动推导出变量类型,auto a=10; 不可批初始化不同类型,&和·*可推导出const与volatile属性, 可做函数形参使用 限制: 1、无法推演出数组(无法区分数组和结构体的{})解决换成& 2、无法成为模板参数 3、不能用作函数参数 4、不能用于非静态成员变量 decltype:decltype(表达式),抽取表达式类型,decltype(a)y;可做形参 基于范围的for: for(elemtype val:array) { } 范围变量名称val在范围数组array内每个元素迭代一次,含auto可const避免无法指向 指针空值——nullptr NULL被定义为字面常量0或空指针,怎么区分?关键字nullptr代表空指针 nullptr隐式转换为指针类型 静态联编,编译结束时释放空间,动态联编,运行时释放空间 #include字符串库,c++,std::string 直接用作定义字符串类型 #include .at()遍历字符串同字符串数组 面向过程:自上而下,用封装逐步实现 对象的状态:静态属性,内部信息变量 对象的行为(方法):函数, class为类型声明符,不分配空间,故extern、auto、register都不能用 访问限定符:public(公有)可外部访问实体对象,private(私有的)和protected(保护的,继承是类似公有)皆不可外部访问,访问符. 和结构体区别:结构体默认都可访问,class默认private不可访问(封装性)引用
inline函数
缺省参数
函数重载
名字粉碎(名字修饰)
函数模板
名字空间namespace
new//delete
类型推导:
string使用
面向对象的编程
类