新学的C++ 先学概念啦

数据类型

基础数据类型————常量和变量  哈哈 python学过

变量:就是随时变化的量  常量:一经定义它的值就不会被改变

1.使用预处理命令

#define 常量名 常量值

预处理的命令跟普通的C++代码不一样,它的末尾不需要分号

在C和C++中允许用一个标识符来表示一个字符串,成为宏,被定义的标识符称为宏名,在编译预处理的时候,宏名会被字符串替换掉,从而叫做宏代换或宏展开。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

宏定义说明:1. 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。

  2. 宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。

  3. 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令2.用const来定义常量const 数据类型 常量名 = 常量值两者的区别:const确确实实的存在可以被调用,传递  而#define它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。const常量存在于程序的数据段.#define常量存在于程序的代码段

简单类型

1.整型 整数 2.浮点型(实型)小数 

3.字符型(指用单引号引起来的一个字符)

字符又分为符号字符和无符号字符  普通字符:就是键盘上看到的各种字母和符号

转义字符就是以\开头的 \a响铃 \a换行 \"双引号 \'单引号 \v竖向跳格 \b退格 \r回车 \\反斜杠字符 \t制表符

4.布尔型

5.空类型 函数无返回值 void main();  函数不带参数 void main(void); 函数的形参定义为void类型 定义通用指针

对比分析共用体和结构体

好像python里面的字典

结构体:内部成员需要有联系 各成员所占的内存长度之和 每个成员都分别占有自己的内存

共用体:不需要有联系 最长成员变量的长度,换一句话说就是全部成员共同占用一段内存

它们的成员可以是一个已定义的结构体,或共用体类型变量,或者是指向本结构体或共用体类型的指针变量

在实例中简单应用指针类型

假使地址1中的内存存放着1个变量,而这个变量值等于地址2的值,那地址1中的变量就是指向地址2的指针。

1.指针变量的4个特性

指针变量的值不是一般的数据而是变量的地址

指针变量的值不可以人为指定,而是必须严格遵循计算机内存的地址值,所以它的赋值行为不同于其他数据类型

通过指针变量的值,再加上特殊运算符可以存放于该值的变量中的内容

指针变量中存放的地址 只能是和它类型一样的变量的地址

2.指针变量的格式:类型修饰符*变量名;int * house_num;//  变量名house_num的类型为int*,此标识符表达能保存int型变量的地址的指针变量

3.指针变量的初始化

指针类型初始化的通用格式:

类型修饰符 变量名1 = 对应类型修饰符的任意值;

变量名 = &变量1;  &就是取地址运算符它的作用就是将变量1的地址赋给变量名

4.通过指针变量获取地址所指向的变量的值并改变它  直接*变量名;

5.注意事项

在定义完指针变量后,它必须被初始化。如果写出以下代码可能会导致计算机内存中的1个很重要的值被改变,从而改变计算机的很多行为

int *house;

*house =4 ;

实现面向对象编程的必要条件——类

推出的类 是面向大型开发程序的,能够大大提升开发效率

类包含两个部分:成员变量和成员函数,类中的成员变量和成员函数都是相互有联系的,可能联想到结构体。但是结构体中只有变量,没有函数的实现,因此它只能称为类的雏形。结构体能使相关的数据能够有机结合在一起,类是具有相同属性的具体物体的一种抽象概念,而它是共有属性的定义,实现(集合和函数)的集合。·

简单应用srting类

string类就是对char的各种操作做了个包装 必须在开头加上#include<string>类

对于string可以把它当作是普通类型的数据来定义和初始化

能减少代码行数的数据类型——数组

面对一系列的有联系并且数据类型可以不同的变量时,它们可以组成1个结构体或类,而面对一些没有关联的但是处于内存空间的考虑,它们可以组成一个共用体,但是还有另外一个数据类型——数组。它是为同类型的变量准备的不管是否有联系

数组是由相同数据类型的变量组成的一个集合,C++把这些变量叫做一个数组。有下标,数组元素在内存中时连续存放的

应用读写数据——一维数组

书写形式:数据类型 数据名【数组大小】

1.数组大小被提前告知的情况下

char ch[100];

for(int i =0 ; i<100 ; i++)

{

   ch[i] = i ;

}

2.数组大小不被提前告知

定义形式:char ch[];

初始化形式;ch[] = {1,2,3,4,5};

应用图像处理——二维数组

定义:数据类型 数组名 【行数】【列数】;

访问形式:数组名 【行下标】【列下标】

应用处理字符串——字符串数组

字符串数组比较特殊 它的特殊性表现在要声明字符数组的个数和输出二维字符数组的元素

1.字符的个数

从字符串的内部结构说:对于一个长度为n的字符串 其实它需要n+1个字节的存储空间,因为C++字符串必须要以\0来结尾,不同于字符变量的初始化方式(用一对单引号引起来),字符串必须要用一对双引号引起来

char fangshi1[6] = {'h','e','l','l','o'};

char fangshi2[6] = "hello";

这两个的输出结果是一样的

如果字符数组只定义了5个元素  第一行的代码输出不会报错 但是会出现一堆离开乱码 第二行的代码 程序在编译的时候就会出错

对于\0的作用  \0是一个不可显示的字符 标志着字符串的结束

如果定义字符个数多于存储字符串所需的个数 系统是会往内存区中自动输出\0字符

输出二维字符数组的元素

运算符的应用

应用 = ——赋值运算符

! 非 % 取余   !=不等于 &&与 ||或 

C++的流程控制语句

if 表达式

条件真时执行的语句1

else

条件假时执行的语句2if

else if

else if

else   以上条件都为假时执行的语句

switch语句

switch(<表达式>)

{

case <表达式的结果数值是1>:<语句1>

break;

case <表达式的结果数值是2>:<语句2>

break;

...

case<表达式的结果数值是n>:<语句n>

break;

default;   <语句n+1>

break;

}

switch重点要说的是

他的表达式结果类型必须是整型,也就是它的返回值必须是整数  如果返回值都不符合所有case中的值,则默认执行default中的语句  因此按良好的编程习惯,switch结构必须要有default这一项,以防传入的值不符合所列case项导致的一些不必要的bug

实现程序的循环结构——for 语句、while 语句和do…while语句

for语句 while 语句

do... while 语句

do...while 在运行点到达do后,先执行循环体中的语句,再判断条件表达式是否满足。如果条件满足,就执行循环体,如果不满足就退出循环体,继续执行以下代码。当do...while循环体只有一个语句时,习惯上也会用大括号将其括起来。do...while最后一定要加上英文状态下的分号。

函数

返回类型 函数名 函数体

函数的参数和返回值

1.函数的参数 数据类型1 变量名1,数据类型2,变量名2...

2.函数的返回值

string的返回类型是string,同时对于要实现不同功能的函数还可以将其定义为(void),int,double

函数的调用:分为无参函数和有参函数的调用

函数的嵌套调用

函数的递归调用:就是自己调用自己,它的出现可以是一些复杂的代码具有逻辑性,代码量也会减少很多必须在调用函数体的前面声明所要调用的函数,如:int calculation(int a);

在main()函数体内嵌套calculation(int a)而calculation()本身又是个递归函数。当入参a满足为0时,就返回main()体内,继续执行后面代码;如果入参a不等于0时,仍就返回自身体内执行calculation()命令。

 

 

posted @ 2018-03-07 21:45  为我所爱一路奋战  阅读(42)  评论(0)    收藏  举报