c++语法系列(二)

<meta charset="utf-8">

比c语言新增bool值类型

例:c中while(false==1){

.....

}

c++中 while(flase){

.....

}

c++中变量定义:

1.复制初始化:int x = 1024;

2.直接初始化 int x(1024);

c++随用随定义

cout语法形式

cout<<x<<endl;//endl代表了回车

cout<<"x + y = "<< x+y<<endl;

cout<<"x + y ="<<x+y;

cin语法形式:

cin>>x;

cin>>x>>y;

优点:不关心占位符,不关心数据类型 不容易出现问题

第一章

1.5(c++11标准)关于c++中HelloWorld一些边边角角的东西

1. c++中的#include<iostream>(头文件的引入也可以按c的方式来写#include<cstdio>,版本不同表示方法不同,不过多解释)

iostream 其实代表了istream(输入流文件)、ostream(输出流文件)的组合。但其实中并不在于是否是输入流或者输出流,重点是流的概念,引入了流这个对象(简单可以如此理解)

2.using namespace std;

这是使用了std命名空间,就像是山东济南一样 std代表的就是山东,山东后面就可以跟济南,跟德州,跟济宁,但是不能跟杭州,因为杭州不属于济南。可能这样说好理解一点

但是问题来了,假若山东有地地方叫做济阳,湖南也有个地方叫做济阳那该怎么办呢?

好的木得着急,可以这样山东::济阳 , 湖南::济阳,

::就表示从属关系

using namespace std standard//就是使用标准的命名空间

3.大多数初学者都知道cout是输出函数,cin是输入函数,但对它实现的原理可能还是很模糊

比如:cout<<"老哥"<<endl;

这就话的简单理解就是输出一行:老哥

再深一点的理解 当我们使用cout函数的时候,就是用cout创建了一个输出流的对象(把这个对象当做一个要输出在屏幕上的必然,不知道这样说理不理解)

"<<"就是一个用于插入的插入运算符,<<后面跟的内容,就要要放到这个输出流去跟随这个流进行输出的,可以这样理解,这里的流是一定要输出的,只是把<<后面的内容插入到这个一定要输出的流中。cin>>"xxx"也可以这样理解。

4. endl和\n的区别:

endl实际上是有两个功能的 第一,碰到它换行;第二,他表示当前流的结束,就是必然要输入和输出的流结束了,要把之前的缓存的输入和输出进行输入和输出。

\n只是表示回车而已,无其他作用。

单行注释//

多行注释/* */

1.7节c++编译过程

1,编译(预处理 -> 编译 -> 目标文件)产生.o或者.obj文件

预处理:g++ -o HelloWorld.ii -E HelloWorld.cpp:将预处理产生的ii文件显示出来(.ii)

编译:g++ -o HelloWorld.s -S HelloWorld.ii :将产生的汇编文件显示出来(.s)

生成目标文件:g++ -o HelloWorld.o -c HelloWorld.s(.o)

2,目标文件跟C++的库函数相连接 -> 将源函数所用的库函数代码与目标代码进行合并->二进制机器代码。

与库函数连接生成了最终的可执行文件:

g++ -o HelloWorld.exe HelloWorld.o(.exe)

生成最终的二进制文件

第二章

2.2节指令

1,计算机的体系:冯诺依曼体系

控制计算机(计算机-xxx)

请xxx吃饭 - 发送指令给xxx

指令 - 命令

操作计算机的内存(ram,rom)

2.3节变量

内存用连续的字节组成

变量就是变量所占的内存空间

命名规则:1由字母数字下划线组成

2首字母只能下划线或者字母

3不能是关键字(保留字)

{不适用拼音,不适用单个英文单词,使用有正式含义的英文单词}

2.4节常见数据类型

数值与非数值

数值:整形+浮点型

整形(char, int 32位, short, long, longlong(c++11标 准))

浮点型(float,double,long double)

非数值(string)身份证号(string)

boolean 0或者非0

2.5数据类型小结

整形有符号版和无符号版

typedef char my_char;

自己定义字符串类型的别名

纯大写代表常量

2.6声明和使用变量

下划线命名法和骆驼命名法

注意注释写法

float:32位 显示6到7位有效数字

可以在结尾加f或者不加f都可以

double 64位

2.7课堂练习

int main()

{

double doubleNum = 100.0/3.0;

//控制cout显示精度

//1.强制以小数的方式显示

cout<<fixed;

//2.控制显示的小数位置

cout<<setprecision(2);

cout << doubleNum *1000000<< endl;

return 0;

}

一起用 cout<<fixed<<setprecision(2);

用setw()只管它后边一个数字。

[图片上传失败...(image-cb8c48-1557127460375)]

第三章

3.1回顾

double 8位

long double 16位

float 8位

float和double的精度问题 float精度有问题6

3.2

//窗口名称修改

SetConsoleTitle("实例,打印德玛西亚之力的详细信息");

cin 可以自动按照输入参数的类型截断;

3.5转义字符

string 就是字符串类型

setw(8)限定宽度,要加头文件#include<iomainip>

3.6算数运算符与表达式

3.7类型转换

原则:范围小的类型的值向范围大的类型的值进行转换

short -> int ->long -> float->double

强制类型转换

第四章

4.1

单目运算符,双目运算符

bool flag = true;

cout<<boolalpha;//打印bool的0和非0,打印成true和flase

cout<<"15>30?"<<(15>30)<<Endl;

输出:15>30?false

&&并且 ||或 !非

4.2位与size运算符

按位与& ->

按位非~ :

1,二进制取反 00000010正数

11111101负数(第一位是符号位)

2,负数二进制转化为十进制

将二进制取反 然后加1,结果变为为负数;

11111101 -> 00000010 -> 加一 11(3)-> -3;

3,按位异或 同假异真

4,左移 << :2<<3 -> 10左移三位 10000->16

右移>> 16>>2 10000右移两位100就是4;

计算2的倍数;算得极快

5,sizeof(),整型4个字节 bool一个字节 double8个字 节

4.3运算符与优先级

\0 -> 空格

switch:(){

case常量1:

语句1

break;

case常量2:

语句1

break;

case常量3:

语句1

break;

case常量4:

语句1

break;

default:0

第五章循环

第六章 循环

6.1 for循环

const 定义常量内存效率高 真*常量

实例:const int N=6;

变量不更新就容易死循环

6.3

跳出总的循环 break,只要在break在循环体内 但是continute 只是跳出当前进行的一次的循环 dowhile中使用continue则直接去执行while后面的条件(dowhile多用于)

第七章 循环进阶

7.2图形循环显示

平面图形 --2维

双循环 - 嵌套循环

打印星号矩形: .//换行和归零

1,控制行数

2,控制列数

外层循环控制行

内层循环控制列

**




打印三角形,就是讨论i和j的关系

*

***

*****


星号的规律

i j

0 0

1 2

2 4

号的规律

i j

0 2

1 1

2 0

j<=j=2-i;

*****

***

*

井号规律

i j

0 0

1 1

2 2

j<=i

星号规律

i j

0 4

1 2

2 0

j<=4-2*i

第六章 数组

6.1数组:

常用统一操作(‘z’ c++中采用整形表示java中不行)

定义:int nums【k】;

const int nums【k】;

c++数组长度可以是变量

int years[6]={52,52,5,6,52,1};

int day[]={1,52};

int day[]={};//错误

省略其实是等号===

int days[]{15,52,5};

数组排序

1冒泡循环:外层循环比较的轮数

内层循环控制次数和交换

2,选择排序:

插入:1在有序的数组中找到第一个比要插入的数字大的数

2记录这个数的下标

3从数组最后一位开始依次后移,一直移记录的下标位置

4,插入

二维数组

数组的替代品:

vector:快速的数组,容器;大小可以动态扩展;

快速索引

动态增长

插入删除数据

定义:vector<double> vec1;

vector<double> vec1(4);

vector<double> vec1(4,52);

数组必须先声明大小后使用

指针

7.1理解指针

指针是一个保存内存地址的变量

数据类型 *指针变量名

间接运算符

int num =1024;

int * ptr_num;

ptr_num = #

*ptr_num=1111;//num = 1111

找地址

char ch='a';

char *ptr_ch=&ch;

(void *)ptr_ch:是地址

空指针

不指向任何一个对象,在视图使用一个指针之前可以首先检查是否为空。

int * ptr1=nullptr;

int *ptr2 = 0;

int *ptr3 = null(#include<cstdlib>)

void * 指针:存放任意对象的地址.//用途很窄

野指针

引用-------别名

指向常量的引用是非法的但是前面加const就可以

-----间接运算符 指针用 定义使用不一样

引用时:int& num =q;

若是引用常数 const int & num =10;

一个指针4个字节

动态分配内存 new

指针的真正用处:在运行阶段分配未命名的内存以存储值

在此情况下,只能通过指针来访问内存

使用delete释放申请的内存;

int *ptr_int = new int ;//不销毁就会有内存泄漏

delete p

在栈区设了一个变量 在堆区分配了了一块int型空间

编译时--运行时

不要释放已经释放了的内存

不能释放声明变量已经分配的内存

不要创建两个指向同一块内存块的指针,可能产生误操作 delete只使用与new分配的内存

程序的内存

1,栈区-----由编译器自动分配释放,一般释放函数的参数值,局部变量的值---类似数据结构中的栈

2,堆区------由程序员自己分配释放,程序结束时可能由操作系统回收-------类似于链表

3,全局区(静态区--static)------全局变量和静态变量存储在一起,程序结束后由系统释放

4,文字常量区-----常量字符串放在这里,程序结束后由系统统一释放

5,程序代码区---存放函数的地方

二维数组指针创建

//使用指针创建二维数组

int (*p2)[3]=new int[5][3];

//使用指针创建二维数组

int (p2)[3]=new int[5][3];//二维数组降维表示(p2)表示一行

p2[3][2]=998;

for(int i=0;i<5;i++){

for(int j=0;j<3;j++){

cout<<((p2+i)+j)<<",";

}

cout<<endl;

}

cout<<&arrays[1][0]<<endl;//表示第二行第一列的元素地址

cout<<p2+1<<endl;//表示第二行第一列的元素地址

指针可以运算(++ --)变量存储地址的移动

数组是有类型的 比如int []

c++函数

内置函数

自定义函数:三要素(返回值类型,函数名,参数列表)

int sum(int,int);//函数声明

不能单独返回数组

按值传递和按地址传递

void change(num){num++;}

void change(&num){num++;}

数组做方法的参数(传递的是数组指针)

限制方法外修改数组的参数:解决方案:使用const关键字

void show(int valuesArray[],int len )

void show(const int valuesArray[],int len )

int [][5];

函数指针

函数地址:函数地址是存储其机器语言代码的内存开始地址

好处:可以在不同的时间使用不同的函数

函数原型:double sum(double,double);

double (*ptrSum)(double,double);

//定义函数指针

double(*ptr_calc)(double,double);

//定义函数指针使用方法

void print_result(double(*) (double,double),double,double);//声明

void print_result(double(*ptr_calc)(double,double),double num1,double num2){//实现

//调用函数,显示结果

double result = ptr_calc(num1,num2);

cout<<"运算结果为"<<result<<endl;

}

//使用函数指针

print_result(ptr_calc,num1,num2);

函数进阶

1,内联函数(c++提高程序运行速度所做的一项改进)

指针and引用:

引用:书写简便

直接传递对象

1,引用可以做返回类型

绝对不能返回局部变量的引用(内存会被回收)

2,函数可以不会返回值,默认返回做好一个修改的参数

3,只能返回传入的引用本身

4,传入参数和返回参数的时候加const

[图片上传失败...(image-77e9c-1557127460374)]

默认参数

使用默认参数:在函数定义或者原型中给出,不能同时给出

多个参数默认值从右向左赋值,

[图片上传失败...(image-e9ac83-1557127460374)]

重载(const 与 &不用)

函数重载:函数名相同,参数列表不同(特征值不同)

原理:编译时,根据参数列表对函数进行重命名

void swap(int a,int b)-> swap_int _int

void swap (int a,int b,int c)->swap_int _int _int

重载决议确定用哪个

函数模板

函数模板-------建立一个通用的函数

1,函数定义时不指定具体的数据类型(使用虚拟的类型代替)

2,函数调用时候编译器反推数据类型

[图片上传失败...(image-bb5ffd-1557127460374)]

显示 “ “ ”用cout <<"""<<s<<"""<<endl;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容