感谢ljj以及分享的同学,好人一生平安。
1. 注释与续行
C99已改,这条不算。
2.输入输出流
自动按照变量的类型输出,不需要在输出时额外指定。
输入按照变量类型输入,不需要在输入时额外指定类型
cout<<a;相当于把a输出到屏幕(箭头指向屏幕),输出的类型看a的类型自动决定
cin>>b; 相当于把b从键盘接收进来,类型为b的类型。
输出可以用cout>>hex>>a;指定输出的进制
输入,输出可以多种类型一起进行
cin>>a>>b>>c;
先输入a,再输入b,在输入c,中间用空格,tab,回车隔开,不允许用别的符号隔开。
3.灵活的变量说明
C99已经改了,这点不算
4.结构、联合和枚举名
如果自定义一个结构名称,C语言必须写struct,c++直接当作用就可以了。
5.函数原型
C可以写函数原型,也可以不写。
C++要求写。
函数原型必须出现在函数定义之前。
规定函数名称,参数类型,返回值,不要求写参数名称。
6.const修饰符
const int a = 5;
C里面一般用#define a 5
const可以是变量后面跟上任意赋值语句
const 可以和指针一起使用
7.void型指针
众所周知,指针就是一个八个字节的地址。至于指针的类型是为了方便编译器,所以说明指针所指内容有多大。
void* 就是可以指向任何内容的指针,不强制规定其指向的内容的类型。可以接收任何指针,
但是赋值时需要强制类型转换。
8.内联函数
inline标注的函数,本质上是宏替换,一般比较简单,不能包含循环语句
9.缺省参数
在函数原型中给定默认参数。
要求缺省参数必须放在参数表最后,调用时如果某个参数省略,其后的参数均需要省略并使用缺省值。
10.函数重载
可以声明多个同名函数,只有参数不同不同。返回值可以不同。
根据参数类型顺序,个数决定调用时使用哪一个函数。
定义同名函数必须在参数表中有区分,不同的返回值是无法区分的。
函数模板:如果只是参数类型不同,参数个数相同,可以使用T,T1等代替参数类型。main函数不能使用模板。
首先使用对T和T1进行声明,然后在定义函数时使用它们代替参数类型。
template < typename T>
可以使用T作为一个类型
template <class T1,typename T2>
使用T1作为类名,使用T2作为参数类型
11.作用域标示符::
前面是类名,如果缺省则代表全局。
后面是类的属性或者方法。
12.无名联合
略
13.强制类型转换
可以使用 类型(变量名)的语法,比如
float i = float(a);
将a转化为float类型赋值给i
14.动态内存分配
new 代替malloc,delete代替free,new后面跟类名称,返回指向空类的指针。
比如person *p;
p = new person;
delete p;
new的优点:不用写sizeof,直接写类名称。
返回的指针自动匹配不需要强制类型转换。
new可以初始化,需要在类名称后面加上初始值列表
比如:p = new person(‘p’,2);
new后面加上方括号和数字可以申请多维内存,返回第一个内存的首地址。其中第一维可以是任何合法表达式,必须给出所有维数。
p = new person[10];
int i=10;
p=new person[ i ][ 2 ];
删除时在delete前加上方括号,代表删除这个数组。
delete []p;
15.引用
代表该变量地址指向的内容,是隐指针。
比如 int &j= i;
表示j就是i,对j的操作就是对i的操作(已经和python相似了)
引用的时候必须初始化。
在参数传入的时候可以使用 &i, &j
这样不需要传入参数的指针,直接传入参数的值即可。