3、转义字符
\n“adnngb\n”换行符号
\t制表符效果类似与键盘上的TAB键,“\tdengdoeng”,如果输出该字符串则会发现该字符串不是从行首显示,而是跳过一个TAB键的位置开始显示
\r会让输出的字符串从当前行首开始显示,会覆盖原有位置的数据
\a发声,类似键盘按错键的那种声音
\\就是一个单斜杠
\’单引号
\’’双引号
4、标准库函数
引入相应的头文件,则可以使用标准库的相应函数,以简化程序的代码量,标准库里有大量的实现特定功能的函数
例如:
#include
#include
引用上述的头文件后,则可以使用该头文件中已经存在的函数,
例如:
使用longinta=time(NULL);该函数返回从1970年1月1日至今的秒数
二、C++基础语法
1、数据类型
char1个字节
int4个字节
short2个字节
long(int)4个字节
bool1个字节(c语言没有布尔类型)
double8个字节
float4个字节
longdouble8个字节
wchar_t宽字符2个字节
2、变量和常量
变量的命名不能以数字开头,大小写敏感,
例如charName;charname;
上边2个变量是个2个不同类型
变量的声明:
在我们的程序中,某处需要一个变量来存储指定的内容的时候,我们就需
要定义该变量,也就是声明一个变量,并指定了它的类型才能用它
例如:
chara;
intb;
floatsalary;
doublex;
常量的概念有具体的内容,也就是值
定义一个常量的方法:
#definePI3.1415926//缺点别人无法知道该常量的具体类型
一个常量:
constinta=5;以后期间a的值不能改变//建议以后如需要用常量的话用此种类型
栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。
堆:
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
1)引用必须被初始化,指针不必。
2)引用初始化以后不能被改变,指针可以改变所指的对象。
3)不存在指向空值的引用,但是存在指向空值的指针。
3、常用运算符
算术运算符++、--、+、-、*、/、%//此处的%不是百分号,计算机中%来代表取余
逻辑运算符&&(与运算)||(或运算)==(等于)!
=(不等于)
位运算符(二进制数)&^|
逗号运算符a=(x=5,y=7);?
条件运算符?
:
例如:
x=(a>b?
1:
0);
记住运算组合在一起有优先级,如不能确定优先级就用()将你要的顺序括起来
常识:
双目运算符,运算符需要2个操作数
单目也即单操作数运算符例如:
++--
4、语句
C++&C的一条语句结束的标志是分号“;”
代码块可以用“{”“}”括起来表示一个代码块
5、控制结构
常用的选择也就是判断语句
if(a>b)一种形式
if()
{}
else
{}
if(){}
else{
if(){}
elseif(){}
}
注意:
if语句下的else总是和最近的if语句匹配,建议书写方式每个if语句下即就是只有一句话要执行,也请将{}加上
循环语句
for循环
for(intI=0;I<10;i++)
{
语句A;
语句B;
}
while(条件表达式)
{
语句A;
}
do
{
语句A;
}while(条件);
swithc(n)
{
case1:
intn=5;
………..
break;
case2:
……..
break;
default:
break;
}
注意:
每个分支语句下不能给变量初始化,否则会出错
三用户自定数据类型
1、枚举类型
定义一个枚举类型:
enumcolor{BLACK,WHITE,SILVER,RED};枚举中间的值实际上是整型数,如不指定值默认从0开始
enumcolor{BLACK=1,WHITE=2,SILVER,RE};
typedefintinteger;Typedef用来给类型(也可以是自定义结构体的类名)名字起别名,有的时候嫌类姓名过长的话可以用Typedef给该类型取个短名字
2、数组
如需要对10个人的成绩进行排序,我们不可能对10个人的成绩每个都定义个变量来存放每个人的成绩,这是就用我的我们的数组了
所谓数组就是存放相同类型数据的以个组合,实际当然不是这样,只是为了便于理解
定一个数组的时候必须指定大小,在数组定义的时候如给数组进行初始化则可以不必声明数组大小,数组大小是指数组能存放多少个元素
例如:
inta[10];
inta[3]={1,3,5};a[0]=1;a[1]=3;a[2]=5;数组存放元素总是从零号位置开始
inta[]={1,2,3,4,5,5};数组大小为6
charstr[100];
注意:
字符数组和其他类型数组有所区别,
例如:
sizeof(a)=4;sizeof(str)=100;面试常用来考察基础知识的题目
多维数组inta[][],inta[][][];一般用到2维数组就可以了;
3、结构体
其用处在于,比如想描述多个人的年龄,身高信息时,每个人的年龄和身高都是一组的时候,就需要用到结构体,注意和数组的区别在与数组时相同类型的数据的集合,
而结构则把不同信息放到一个整体中
另外:
结构体是一种类型,数组不是类型只是相同的数据的类型的数据的集合
实例:
structnode_type
{
charname[20];
intage;
};注意:
写程序的时候分号不能少
上述类型名字在C语言和C++的区别在于:
C++node_type可以作为类型来应用C语言不可以
Cstructnode_type才能做为数据类型来用;
typedefstructnode_type
{
charname[20];
intage;
}nodetype;
这时在C++和C语言中都一样可以用nodetype来当类型名来用
4、联合体
uniondate
{
Inta;
Charc;
Doubled;
Floatn;
Longdoublem;8
};
sizeof(date)=?
匿名联合体
union{
Inta;
Charc;
Doubled;
Floatn;
Longdoublem;
};
可以直接用匿名联合体中的变量,教材中这样讲的,我个人在其他编译器中匿名联合没有成功,建议以后写程序尽量避免
四、结构化编程
1、函数:
实现特定功能的一段代码;
函数的形式:
返回类型函数名字(形参列表)
{
函数体
}
2、内联函数编译的时候碰到该函数的调用的时候将此函数的代码拷贝到调用的地方,和普通函数不一样
inlinevoidfun(形参列表)
{
函数体
}
例如:
#include
usingnamespacestd;
voidf1(inta)//a为形参,形参:
内存中并没有给它分配内存
{
cout<}
char*f2(char*str)
{
//charname[20]="HelloC++!
";
str="HelloC++!
";
returnstr;
}
intmain()
{
voidf3(inta,intb);//函数声明,如无此句,则下边调用f3函数的时候会找不到该函数
intx=10;
inty=15;
charstrTemp[20]={"HelloWorld!
"};
char*str1;
f1(x);//x为实参
str1=f2(strTemp);//strTemp为实参
f3(x,y);//此处并没有实现a和b的交换
cout<return0;
}
voidf3(inta,intb)
{
Intt=0;
t=a;
a=b;
b=t;
}
3、函数重载:
只返回类型不同不能叫函数重载,此时编译器不会让通过的
函数重载的条件是形参类型、形参个数不同,函数名相同,才符合函数重载的的条件
递归函数
例如求n阶乘的
n!
=n*(n-1)!
1!
=1;
五、指针和引用
1、常用的指针类型
int*p[n];-----指针数组,每个元素均为指向整型数据的指针。
int(*p)[n];------p为指向一维数组的指针,这个一维数组有n个整型数据。
int*p();----------函数带回指针,指针指向返回的值此时P为一个函数名,本句意思声明函数。
int(*p)();------p为指向函数的指针。
例题:
下边是一个字符串拷贝的函数,注意该题目面试经常出现,少一步少2分
char*strcpy(char*strDest,constchar*strSrc)
{
if(strDest==NULL||strSrc==NULL)
returnNULL;
if(strDest==strSrc)
returnstrDest;
char*tempptr=strDest;
while((*strDest++=*strSrc++)!
=‘\\0’)
;
returntempptr;
}
2、将“引用”作为函数参数有哪些特点?
传递引用给函数与传递指针的效果是一样的。
这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。
因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。
而引用更容易使用,更清晰。
3、关于局部变量和全局便来ng
一些变量在整个程序中都是可见的,它们称为全局变量。
一些变量只能在一个函数中可知,称为局部变量。
这就是他们的区别。
在任何函数外面定义的变量就是全局变量,在函数内部定义的变量是局部变量,这是它们在程序中的实现过程。
操作系统和编译器是根据程序运行的内存区域知道他们的,程序的全局数据放在所分配内存的全局数据区,程序的局部数据放在栈区。