C++基础

在使用cin和cout时,要在源文件最上方加上#include和usingnamespacestd;

分为单行注释和多行注释:

定义为数据类型+变量名+赋初值

定义方式有两种

x1#defineday723intmain()4{5constintmonth=12;//const定义的常量6}两种定义的常量都是不能被修改的,否则会报错。

在给变量和常量起名字时,不要用关键字作变量名。

给变量起名字时,最好做到见名知意。

如果超出范围会发生一些有意思的事,比如:shorta=32768;实际上a打印出来为-32768,从上限反转到下限。

其中int最为常用。

sizeof(数据类型/变量),返回是字节数

分为float和double,单精度占4个字节、双精度占8个字节,区别就是有效数字位数不同,不管是单精度还是双精度在打印时只显示6位有效数字

科学计数法:3e2意思是3*10^2=300,e之后的数字表示10的多少次方。

字符型变量占用1个字节空间,字符型变量并不是把字符本身放到内存中去存储,而是将对应的ASCII编码放入存储单元,想要打印ASCII的值可以用(int)a来转换。可以直接用ASCII给字符型变量赋值如:ch=97;

常见的一些错误如下:

常用的几个如下:

两种风格

bool类型只占用一个字节的空间,只有两个值true或false本质分别为1和0。

主要语法用到cin>>变量,cin可以为整型、浮点型、字符型,字符串型、bool型(只要是输入非0的值,都会赋值成1)赋值。

加减乘除,应当注意的是除法运算,两个整型数相除结果依然是整型,0不能作除数否则报错。

取模运算即取余数使用%,应当注意的是0不能作为取余运算的右操作数,且两个小数不能作取余运算。

前置递增和后置递增,都可以让变量加1,但是它们的区别是:前置递增是先让变量+1,再进行表达式的运算,后置递增是先进行表达式的运算,再让变量+1。前置递减和后置递减也是同样的道理。

举例如下:

xxxxxxxxxx81inta=10;23a=100;//普通赋值4a+=2;//等价于a=a+25a-=3;//等价于a=a-36a*=4;//等价于a=a*47a/=5;//等价于a=a/58a%=6;//等价于a=a%63.3比较运算符主要有大于、小于、等于、不等于、大于等于、小于等于。比较运算表达式的结果为0或1,0代表逻辑false,1代表逻辑true。

注意:

xxxxxxxxxx31//有个优先级问题2inta=10,b=20;3cout<<(a==b)<

1.单行if语句,语法如下:

xxxxxxxxxx41if(条件)2{3要执行的语句4}注意的是if(条件)后面不要加分号,否则不管条件满足与否都会执行后面语句。

2.多行if语句,语法如下:

xxxxxxxxxx81if(条件)2{3条件满足下要执行的语句4}5else6{7条件不满足要执行的语句8}3.多条件的if语句,语法如下:

xxxxxxxxxx161if(条件1)2{3条件1满足要执行的语句4}5elseif(条件2)6{7条件1不满足,但条件2满足要执行的语句8}9elseif(条件3)10{11条件1不满足、条件2不满足,但条件3满足要执行的语句12}13else14{15以上条件都不满足要执行的语句16}4.此外if语句还支持嵌套,让条件判断更加精细

语法为:表达式1表达式2:表达式3;

如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果。在C++中三目运算符返回的是变量,可以继续赋值,举例如下:

xxxxxxxxxx71inta=10;2intb=20;3intc=0;45c=(a>ba:b);//相当于c=b67(a>ba:b)=100;//在C++中三目运算符返回的是变量,可以继续赋值,执行后a的值为10,b的值为100通过上面例子可以知道,三目运算符表达式既可以作左值也可以作右值。

语法如下:

xxxxxxxxxx71switch(表达式)2{3case1:执行语句1;break;4case2:执行语句2;break;5……6default:执行语句;break;7}case里面如果不写break程序会一直向下执行

与if的区别:

语法:while(循环条件){循环语句}

只要循环条件为真,就一直执行循环内的语句,要检查是否有跳出循环的出口,除非有的时候我们确实需要死循环。

做一个猜数字的案例,随机生成一个1到100的随机数,让玩家去猜,每次猜系统要提示玩家大了小了,直到玩家猜对为止,游戏结束。

生成一个1到100的随机数,代码为:

与while循环语句不同的是dowhile至少保证代码执行一次。

可以写一个水仙花数案例,找出所有的水仙花数,水仙花数是指一个三位数,它各位数字的三次幂之和等于它本身的数。

语法:for(起始表达式;条件表达式;末尾循环体){循环语句}

注意for循环中的表达式要用分号分隔

可以尝试打印9*9乘法表

用于

用于在循环语句中,跳过本次循环中余下的未执行语句,继续执行下一次循环。例如可以充当一个筛选条件,打印0到100之间所有的奇数。

可以无条件的跳转代码,语法是goto标记;这个标记一般用大写的单词来定义,例如:FLAG。在所需要跳转到地方写一个FLAG:然后当程序执行到goto语句的时候就能实现跳转。不过由于goto语句过于强大,不推荐使用,容易造成程序流程混乱。示例如下:

xxxxxxxxxx111intmain()2{3cout<<"1"<

一维数组定义的三种方式

1.数据类型数组名[数组长度];

2.数据类型数组名[数组长度]={值1,值2……};定义的时候赋初值,如果初始化的时候没有全部填写完会用0来填充剩余的数据比如:

xxxxxxxxxx11intarr[5]={10,20,30};//那么arr[3]和arr[4]就都为0了3.数据类型数组名[]={值1,值2……};初始化几个值,数组长度就为几,不允许不赋值如:intarr[];错误!

需要注意的是一旦采用第一种方式,后面就不能群体赋值了

一维数组名称的用途:

xxxxxxxxxx41cout<<"数组首地址为:"<

冒泡排序是一个比较重要的排序算法,下面为升序的冒泡排序代码:

xxxxxxxxxx181//对一个已知的数组arr做冒泡排序2inti,j,temp;3intlen;4len=sizeof(arr)/sizeof(arr[0]);56//开始冒泡排序,i表示轮数,从第0轮开始一直到第(len-2)轮,第i轮需要进行(len-i-1)次比较7for(i=0;iarr[j+1])12{13temp=arr[j];14arr[j]=arr[j+1];15arr[j+1]=temp;16}17}18}5.3二维数组5.3.1二维数组定义方式二维数组定义的四种方式

这里比较推荐第二种定义方式,直观简单。

查看二维数组所占内存空间。可以统计整个数组在内存中的大小sizeof(数组名);,返回结果为字节数。如果要看每一行占用的大小代码为sizeof(数组名[0]);,如果要看每一个元素占用内存的大小代码为sizeof(数组名[0][0])。

计算二维数组行数代码为sizeof(数组名)/sizeof(数组名[0]);,计算二维数组元素个数代码为sizeof(数组名)/sizeof(数组名[0][0]);

获取二维数组首地址。示例如下:

xxxxxxxxxx51cout<<"数组首地址为:"<

在存储人名的时候可以用一个字符串数组,如下:

xxxxxxxxxx31#include//用字符串型的数据string必须加的头文件23stringnames[3]={"张三","李四","王五"};6.函数6.1概述作用:将一段经常使用的代码封装起来,减少重复性代码。

xxxxxxxxxx61返回值类型函数名(参数列表)2{3函数体语句;45return表达式;6}6.3函数的调用语法为:函数名(参数);

值传递的时候,形参发生任何改变都不会影响实参。可以从内存分配的角度来理解。

常见有四种类型:

步骤为:

注意:在上述的源文件中,开头要写#include"头文件名.h"这个就代表了头文件和源文件它俩之间是配套的(即有关联的);在上述的头文件中,要包含源文件用到的一些标准库,比如源文件中用到cout、cin,那么头文件开头就要写#include和usingnamespacestd;最后,在main函数所在的源文件上方写#include"头文件名.h"。

指针的作用:可以通过指针间接访问内存

指针变量定义的语法为:数据类型*变量名;下面为示例:

xxxxxxxxxx101inta=10;2int*p;//指针的定义3p=&a;//指针变量赋值,也可以定义时一步搞定int*p=&a;45cout<<"变量a的地址为:"<<&a<

空指针作用:用于给指针变量进行初始化,空指针是不可以进行访问的,空指针NULL是0值,而0到255之间的内存编号是系统占用的,因此不可以访问。

野指针:指向非法的内存空间,示例如下:

xxxxxxxxxx21int*p=(int*)0x1100;//将一个十六进制数强转为地址2cout<<*p<

分为以下三种:

const修饰指针---常量指针

定义为:constint*p=&a;

特点是:指针的指向可以修改,但是指针指向的值不可以改。*p=20;错误。p=&b;正确。

const修饰常量---指针常量

定义为:int*constp=&a;

特点是:指针的指向不可以修改,但是指针指向的值可以改。*p=20;正确。p=&b;错误。

const既修饰常量又修饰指针

定义为:constint*constp=&a;

特点是:指针的指向和其指向的值都不可以修改。*p=20;和p=&b;均错误。

利用指针来访问数组中的元素,下面为用指针遍历数组的示例代码:

xxxxxxxxxx91intarr[10]={1,2,3,4,5,6,7,8,9,10};2inti;3int*p=arr;45for(i=0;i<10;i++)6{7cout<<*p<

xxxxxxxxxx231voidswap1(inta,intb)//值传递不会改变实参2{3inttemp=a;4a=b;5b=temp;6}78voidswap2(int*p1,int*p2)//地址传递会改变实参9{10inttemp=*p1;11*p1=*p2;12*p2=temp;13}1415intmain()16{17inta=10,b=20;18swap1(a,b);19cout<<"a和b的值分别为:"<

做一个综合案例,封装一个函数,利用冒泡排序实现对一个数组的升序排序。数组为intarr[10]={4,3,6,9,1,2,10,8,7,5};

xxxxxxxxxx361voidbubbleSort(int*arr,intlen)2{3inti,j,temp;4for(i=0;iarr[j+1])9{10temp=arr[j];11arr[j]=arr[j+1];12arr[j+1]=temp;13}14}15}16}1718voidprintarr(int*arr,intlen)19{20for(inti=0;i

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。

语法:struct结构体名{结构体成员列表};

通过结构体创建变量的方式有三种:

xxxxxxxxxx181structstudent2{3stringname;4intage;5intscore;6}s3;//第三种创建方式,定义结构体时顺便创建变量,之后像第一种一样利用.来对其属性赋值78intmain()9{10//第一种创建方式,之后想要赋值就要用.来访问其属性11structstudents1;//这里可以省去struct,但是在结构体定义时struct不能省12s1.name="张三";13s1.age=18;14s1.score=90;1516//第二种创建方式,创建时就赋初值17structstudents2={"李四",19,95};18}8.3结构体数组语法:struct结构体名数组名[元素个数]={{},{}……};

结构体数组与其他数组一样,可以在创建的时候赋初值,也可以只创建,之后用.号来赋属性的值。

利用操作符->可以通过结构体指针访问结构体属性。

xxxxxxxxxx41structstudents={"张三",18,90};2structstudent*p=&s;34p->name="李四";//与其他数据类型的指针不同8.5结构体嵌套结构体在结构体中可以定义另一个结构体作为成员,形成结构体嵌套结构体。

xxxxxxxxxx161structteacher2{3stringname;4intage;5structstudentstu;6};78intmain()9{10structteachert;11t.name="老王";12t.age="30";13t.stu.name="小王";14t.stu.age=18;15t.stu.score=90;//利用多个.号访问作为成员的结构体的属性16}8.6结构体作函数参数将结构体作为参数向函数中传递,传递方式有两种:

比如说,向子函数传一个学生的结构体,要求子函数打印学生的信息,代码如下:

xxxxxxxxxx191voidprintstu1(structstudents)2{3//s.name="李四";回到main函数在,实参值不变,还为原来4cout<<"学生姓名:"<name="李四";回到main函数中,实参的值会真的被修改10cout<<"学生姓名:"<name<<"成绩:"<score<

作用:用const来限定只读操作,防止误修改

应用场景的产生:在向子函数传递一个结构体时,如果采用值传递,那么会在子函数中复制出一个新的副本,当结构体十分庞大时会占用比较多的内存资源,所以我们采用地址传递(只传入地址4个字节节省内存空间),但是地址传递可以修改实参的值,容易造成误修改。此时就有了使用const的必要,加入const之后一旦有修改的操作就会报错,可以防止误操作。

xxxxxxxxxx121voidprintstu(conststructstudent*p)2{3//p->age=20;加了const后这句代码就会报错,从而避免了实参值的误修改

THE END
1.MicrosoftC/C++文档MicrosoftLearn了解如何使用 C++ 针对平台和设备开发应用程序、服务和工具。https://docs.microsoft.com/zh-cn/cpp/
2.C++语言的起源。哪些程序是C++编写的?为什么早期VC++对ANSIC89之后的...C++的++来源于C语言的递增运算符,代表增加,意义为扩展。Bjarne Stroustrup博士在做博士论文写代码的时候,遇到一些困难,发现Simula和BCPL等语言因为本身时代局限都满足不了它的需求,利用C语言快速可移植强,加上一些带类的特性,通过C Front编译成C代码可以很好满足他的需求。后面不断发展,变成了C++....https://blog.csdn.net/cxsjabcabc/article/details/143480537
3.C++SyntaxHeader files add functionality to C++ programs.Line 2: using namespace std means that we can use names for objects and variables from the standard library.Don't worry if you don't understand how #include <iostream> and using namespace std works. Just think of it as something that (almost...https://www.w3schools.com/cpp/cpp_syntax.asp
4.C++ProgrammingLanguageC++ is the most used and most popular programming language developed by Bjarne Stroustrup. C++ is a high-level and object-oriented programming language. This language allows developers to write clean and efficient code for large applications and software development, game development, and operating ...https://www.geeksforgeeks.org/c-plus-plus/
5.C++参考手册功能特性测试宏 (C++20) 语言功能特性 ? 标准库功能特性 语言支持库 程序工具 信号 ? 非局部跳转 基本内存管理 变参数函数 source_location (C++20) 协程支持 (C++20) 比较工具 (C++20) 类型支持 ? type_info numeric_limits ? exception initializer_list (C++11)概念库 (C++20) 诊断...https://zh.cppreference.com/w/cpp
6.thec++resourcesnetworkC++ Language: Learn this versatile and powerful programming language. Includes detailed explanations ofpointers,functions,classesandtemplates, among others... Reference Description of the most important classes, functions and objects of the Standard Language Library, with descriptive fully-functional short pr...https://www.cplusplus.com/
7.C++在C++的第二阶段,引入了标准模板库(STL),STL是一个通用的、可复用的程序库,它包含了许多容器(如向量、列表、映射等)和算法(如排序、查找等),以及迭代器等组件,使得C++程序员能够更加方便地编写高效、可维护的代码。STL引入了泛型程序设计的概念,使得代码可以更加通用和灵活。另一个重要的事件是Boost程序库的出现...https://glopedia.cn/660/
8.厦门人才网5、C++工程师11-13 6、系统工程师(底层协议)11-13 7、系统工程师(应用开发)11-13 8、硬件工程师11-13 营销中心 9、省区销售经理11-13 10、区域销售经理11-13 11、销售工程师11-13 12、售后工程师11-13 13、销售/营销/业务员11-13 14、技术支持工程师11-13 ...https://www.xmrc.com.cn/net/info/showco.aspx?ID=2911053
9.游戏常用运行库安装包游戏工具游侠补丁Visual c++ 运行库 错误提示: 各种未知错误如“配置不正确”或其他错误;没有找到 Msvcp100.DLL visual c++ 2005运行库 下载 大小:5.58MB visual c++ 2008运行库 下载 大小:8.56MB visual c++ 2010运行库 下载 大小:10.15MB Visual C++ 2005 JP 日版游戏运行库 ...https://www.ali213.net/zhuanti/yxk/