C++基础知识--考前浏览

数据结构知识点-CSDN博客

目录

数据结构知识点-CSDN博客

一、数据类型总结

1、整型

2、sizeof关键字

3、浮点型

4、数值型常量

4.1数值常量

4.2浮点数的表示方法

5、字符型常量

6、字符串型常量

7、布尔类型bool

8、数据的输入输出

9、变量命名规则

10、局部变量

11、全局变量

二、运算符总结

1.算术运算符

2.赋值运算符

3.比较运算符

4.逻辑运算符

三、流程结构总结

1、选择结构

1.1、if语句

1.2、三目运算符

1.3、switch语句

2、循环结构

2.1、while

2.2、do…while

2.3、for

3、跳转语句

3.1、break

3.2、continue

四、数组

1、一维数组

2、二维数组

3、字符数组

4、字符串函数

五、函数总结

1、函数定义

2、函数调用

3、函数声明

4、值传递

5、函数默认参数

6、函数占位参数

六、指针

1、指针变量

2、const修饰指针

3、指针和数组

4、指针和函数

4、返回指针值的函数

七、引用

1、引用注意事项

2、引用做函数参数

3、引用做函数返回值

八、类和对象

1、struct和class区别


一、数据类型总结

1、整型

作用:整型变量表示的是整数类型的数据

int - 占4个字节
unsigned int - 无符号整型,占4个字节

2、sizeof关键字

作用:利用sizeof关键字可以统计数据类型所占内存大小

3、浮点型

作用:用于表示小数

浮点型变量分为两种:

单精度float ➡占4个字节,有效位数为7位,小数点后6位。
双精度double ➡占8个字节,有效位数为16位,小数点后15位。

4、数值型常量
4.1数值常量

一个整型常量可以用3种不同的方式表示:

十进制整数。如1357,-432,0等
八进制整数。在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。
十六进制整数。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式表示的常数

4.2浮点数的表示方法

一个浮点数可以用两种不同的方式表示:

十进制小数形式。如21.456,-7.98等。
指数形式(即浮点形式)

5、字符型常量

作用:字符型变量用于显示单个字符

语法:char ch = 'a';

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号

注意2:单引号内只能有一个字符,不可以是字符串

C和C++中字符型变量只占用1个字节。

字符常量只能包括一个字符,如′AB′ 是不合法的

字符常量区分大小写字母,如′A′和′a′是两个不同的字符常量

字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元

6、字符串型常量

作用:用于表示一串字符

两种风格

C风格字符串: char 变量名[] = "字符串值"

char str1[] = "hello world";

注意:C风格的字符串要用双引号括起来

C++风格字符串: string 变量名 = "字符串值"

string str = "hello world";

注意:C++风格字符串,需要加入头文件==#include<string>==

字符串常量为双引号

常考:字符串 "abc" 在内存中占几个字节?

答:占4个字节,而不是3个字节,编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志

常考: 字符串常量″abc\n″包含几个字符?

答:不是5个而是4个字符,其中“\n”是一个转义字符,但它在内存中占5个字节

7、布尔类型bool

作用:布尔数据类型代表真或假的值

bool类型只有两个值:

true — 真(本质是1)
false — 假(本质是0)
bool类型占1个字节大小

8、数据的输入输出

关键字:cin、cout

语法: cin >> 变量1>>变量2>>....>>变量n、cout<<表达式1<<表达式2<<...<<表达式n

cout<<a,b,c;     //错误,不能一次插入多项cout<<a+b+c;     //正确,这是一个表达式,作为一项cin>>a>>b>>c>>d;


9、变量命名规则

C++规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线
不能是关键字
区分大小写

10、局部变量

在一个函数内部定义的变量是局部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的
形参也是局部变量

11、全局变量

在函数之外定义的变量是外部变量,称为全局变量

二、运算符总结

1.算术运算符

注意:

两个整数相除结果依然是整数(这里不进行四舍五入,直接舍去小数点后面数字)

C++中两个小数可以相除

运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C++在运算时对所有float型数据都按double型数据处理

只有整型变量可以进行取模运算,两个小数不可以取模

在除法运算中,除数不能为0

取模运算时,除数也不能为0

常考:

前置后置运算符单独使用没有什么区别

前置递增先对变量进行++,再计算表达式

后置递增先计算表达式,后对变量进行++

请详细看下方代码并理解

//递增int main() { //后置递增
int a = 10;
a++; //等价于a = a + 1
cout << a << endl; // 11

//前置递增
int b = 10;
++b;
cout << b << endl; // 11

//区别
//前置递增先对变量进行++,再计算表达式
int a2 = 10; int b2 = ++a2 * 10;
cout << b2 << endl; //110

//后置递增先计算表达式,后对变量进行++
int a3 = 10; int b3 = a3++ * 10;
cout << b3 << endl; //100

system("pause"); return 0;

2.赋值运算符

作用:用于将表达式的值赋给变量

请详细看表格即可

3.比较运算符

作用:用于表达式的比较,并返回一个真值或假值

4.逻辑运算符

作用:用于根据表达式的值返回真值或假值

!非为三者中运算符最高的

三、流程结构总结

1、选择结构
1.1、if语句

if语句较为简单,常常搭配else使用,且可以嵌套使用

1.2、三目运算符

作用: 通过三目运算符实现简单的判断

语法:表达式1 ? 表达式2 :表达式3

如果表达式1的值为真,执行表达式2,并返回表达式2的结果;

如果表达式1的值为假,执行表达式3,并返回表达式3的结果。

此处常出程序阅读题!!!!

1.3、switch语句

作用:执行多条件分支语句

语法:

switch(表达式)

{ case 结果1:执行语句;break; case 结果2:执行语句;break;

... default:执行语句;break;

}

switch语句中表达式类型只能是整型或者字符型

case里如果没有break,那么程序会一直向下执行

case穿透现象: 在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束。

2、循环结构
2.1、while

作用:满足循环条件,执行循环语句

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

解释:只要循环条件的结果为真,就执行循环语句

2.2、do…while

作用: 满足循环条件,执行循环语句

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

注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件(这里常考两者区

别,记住无论怎样,do…while都会必然执行一次循环语句)

2.3、for

for循环中的表达式,要用分号进行分隔

int main() { for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
system("pause"); return 0;
}


3、跳转语句
3.1、break

作用: 用于跳出选择结构或者循环结构

3.2、continue

作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

注意:continue并没有使整个循环终止,而break会跳出循环

四、数组

数组:所谓数组,就是一个集合,存放相同类型的数据元素

数组中的每个数据元素都是相同的数据类型
数组是由连续的内存位置组成的

1、一维数组

一维数组定义的三种方式:

数据类型 数组名[ 数组长度 ];(常用,了解其余两种即可)
数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
数据类型 数组名[ ] = { 值1,值2 ...};

int score[10];int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };int score3[] = { 100,90,80,70,60,50,40,30,20,10 };


数组中下标是从0开始索引

在对全部数组元素赋初值时,可以不指定数组长度

直接打印数组名,可以查看数组所占内存的首地址

对数组名进行sizeof,可以获取整个数组占内存空间的大小

以上三种方式并不要求都会,但是需要都见过,防止在程序改错中乱改

一维数组初始化

在定义数组时分别对数组元素赋予初值。例如

int a[10]={0,1,2,3,4,5,6,7,8,9};

可以只给一部分元素赋值。例如

int a[10]={0,1,2,3,4};

如果想使一个数组中全部元素值为1,可以写成

int a[10]={1,1,1,1,1,1,1,1,1,1};int a[10]={1*10}; // 错误写法,不能给数组整体赋初值

在对全部数组元素赋初值时,可以不指定数组长度

int a[5]={1,2,3,4,5};// 可以写成int a[]={1,2,3,4,5};


2、二维数组

二维数组定义的四种方式:

数据类型 数组名[ 行数 ][ 列数 ];

数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };

数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

int arr[2][3];int arr2[2][3] =
{
   {1,2,3},
   {4,5,6}
};int arr3[2][3] = { 1,2,3,4,5,6 };

int arr4[][3] = { 1,2,3,4,5,6 };


以上4种定义方式,利用第二种更加直观,提高代码的可读性如果对全部元素赋初值,定义数组时对第一维的长度可以不指定,但是第二维的长度不能省略

3、字符数组

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符

定义:

char c[10] = {′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
赋值:

只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值

char c[5];
c={′C′,′h′,′i′,′n′,′a′};           //错误,不能对整个数组一次赋值

C[0]=′C′; c[1]=′h′; c[2]=′i′; c[3]=′n′; c[4]=′a′;  //对数组元素赋值,正确

int a[5],b[5]={1,2,3,4,5};
a=b;                                   //错误,不能对整个数组整体赋值

a[0]=b[0];                          //正确,引用数组元素

4、字符串函数

字符串连接函数 strcat

字符串复制函数 strcpy

字符串比较函数 strcmp

字符串长度函数 strlen

五、函数总结

作用:将一段经常使用的代码封装起来,减少重复代码

1、函数定义

函数的定义一般主要有5个步骤:

返回值类型

函数名

参数表列

函数体语句

return 表达式

返回值类型 函数名 (参数列表)
{

      函数体语句       return表达式

}


返回值类型 :一个函数可以返回一个值。在函数定义中

函数名:给函数起个名称

参数列表:使用该函数时,传入的数据

函数体语句:花括号内的代码,函数内需要执行的语句

return表达式: 和返回值类型挂钩,函数执行完后,返回相应的数据

示例:定义一个加法函数,实现两个数相加

//函数定义int add(int num1, int num2){ int sum = num1 + num2; return sum;
}


2、函数调用

功能:使用定义好的函数

语法:函数名(参数)

int result = add(10,20);

函数定义里小括号内称为形参,函数调用时传入的参数称为实参

例如此处的num1,num2 为形参,10,20为实参

函数不能嵌套定义但是可以嵌套调用(常考)

3、函数声明

函数的声明可以多次,但是函数的定义只能有一次

//声明可以多次,定义只能一次//声明int max(int a, int b);int max(int a, int b);//定义int max(int a, int b){ return a > b ? a : b;
}int main() { int a = 100; int b = 200;

cout << max(a, b) << endl; system("pause"); return 0;
}


4、值传递

所谓值传递,即单向传递,就是函数调用时实参将数值传入给形参,而不能由形参传回来给实参

值传递时,如果形参发生改变,并不会影响实参(值传递时,形参是修饰不了实参的),请务必

解并记住,此处因篇幅就不进行讲解了!

5、函数默认参数

在C++中,函数的形参列表中的形参是可以有默认值的。

语法:返回值类型 函数名 (参数= 默认值){    }

int func(int a, int b = 10, int c = 10) { return a + b + c;
}

//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值

//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数

int func2(int a = 10, int b = 10);

int func2(int a, int b) { return a + b;
}

int main() {

cout << "ret = " << func(20, 20) << endl;
cout << "ret = " << func(100) << endl; system("pause"); return 0;
}


如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值

如果函数声明有默认值,函数实现的时候就不能有默认参数

6、函数占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法: 返回值类型 函数名 (数据类型){}

//函数占位参数 ,占位参数也可以有默认参数void func(int a, int) {
cout << "this is func" << endl;
}int main() { func(10,10); //占位参数必须填补

system("pause"); return 0;

六、指针

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

1、指针变量

指针变量定义语法: 数据类型 * 变量名;

请看下方代码示例,理解指针变量的定义与使用,期末一般不会出太难指针的题,但是基本用法一定要会!!

int main() { //1、指针的定义
int a = 10; //定义整型变量a

//指针定义语法: 数据类型 * 变量名 ;
int * p; //指针变量赋值
p = &a; //指针指向变量a的地址
cout << &a << endl; //打印数据a的地址
cout << p << endl;  //打印指针变量p
   //0073F8BC
   //0073F8BC

//2、指针的使用
//通过*操作指针变量指向的内存
cout << "*p = " << *p << endl;    // *p = 10

system("pause"); return 0;
}


指针变量和普通变量的区别

普通变量存放的是数据,指针变量存放的是地址

指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

总结1: 我们可以通过 & 符号 获取变量的地址

总结2:利用指针可以记录地址

总结3:对指针变量解引用,可以操作指针指向的内存

总结4:所有指针类型在32位操作系统下是4个字节(了解)

2、const修饰指针

const修饰指针有三种情况

const修饰指针 — 常量指针

const修饰常量 — 指针常量

const既修饰指针,又修饰常量

int main() { int a = 10; int b = 10; //const修饰的是指针,指针指向可以改,指针指向的值不可以更改
const int * p1 = &a;
p1 = &b; //正确
//*p1 = 100;  报错


//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
int * const p2 = &a; //p2 = &b; //错误
*p2 = 100; //正确

   //const既修饰指针又修饰常量
const int * const p3 = &a; //p3 = &b; //错误
//*p3 = 100; //错误

system("pause"); return 0;
}


技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

3、指针和数组

作用:利用指针访问数组中元素

C++规定,数组名就是数组的起始地址

数组的指针就是数组的起始地址

数组名可以作函数的实参和形参,传递的是数组的地址

int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int * p = arr;  //指向数组的指针

cout << "第一个元素: " << arr[0] << endl; //1
cout << "指针访问第一个元素: " << *p << endl;  //1

for (int i = 0; i < 10; i++)
{ //利用指针遍历数组
cout << *p << endl;
p++;
} system("pause"); return 0;
}


4、指针和函数

作用:利用指针作函数参数,可以修改实参的值(地址传递)

//值传递void swap1(int a ,int b){ int temp = a;
a = b;
b = temp;
}//地址传递void swap2(int * p1, int *p2){ int temp = *p1;
*p1 = *p2;
*p2 = temp;
}int main() { int a = 10; int b = 20; swap1(a, b); // 值传递不会改变实参

swap2(&a, &b); //地址传递会改变实参

cout << "a = " << a << endl;

cout << "b = " << b << endl; system("pause"); return 0;
}


int a[10];
int *p = &a[0]; // 等价于 int *p = a; *p = 1;     // 等价于 a[0] = 1;*(p+1) = 2; // 等价于 a[1] = 2;// 所以 *(p+1) = a[1]; *(p+2) = a[2];

C++规定, p+1 指向数组的 下一个元素

void main(){    int array[10];    // 用数组名作形参,因为接收的是地址,所以可以不指定具体的元素个数
   f(array,10);
}// 形参数组f(int arr[],int n)
{
   ....
}


void main(){    int a[10];    // 实参数组
   f(a,10);
}// 形参指针f(int *x,int n)
{
   ...
}


总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

4、返回指针值的函数

返回指针值的函数简称指针函数。

定义指针函数的一般形式为:

// 类型名 * 函数名(参数列表)int  * a(int x,int y); 

七、引用

作用: 给变量起别名

语法: 数据类型 &别名 = 原名

int main() { int a = 10; int &b = a;

cout << "a = " << a << endl;
cout << "b = " << b << endl;    // 10
   // 10

b = 100;

cout << "a = " << a << endl;
cout << "b = " << b << endl;    // 100
   // 100

system("pause"); return 0;
}


1、引用注意事项

引用必须初始化

int &c; // 错误,引用必须初始化

在声明一个引用后,不能再使之作为另一变量的引用

2、引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单

//1. 值传递void mySwap01(int a, int b) { int temp = a;
a = b;
b = temp;
}//2. 地址传递void mySwap02(int* a, int* b) { int temp = *a;
*a = *b;
*b = temp;
}//参数:把地址传进去,用指针接收//3. 引用传递void mySwap03(int& a, int& b) { int temp = a;
a = b;
b = temp;
}//参数:别名,下面的a是上面的a的别名,用别名操作修改可原名操作修改是一样的int main() { int a = 10; int b = 20;    // 值传递,形参不会修饰实参
mySwap01(a, b);
cout << "a:" << a << " b:" << b << endl;    // a:10 b:20

   // 地址传递,形参会修饰实参
mySwap02(&a, &b);
cout << "a:" << a << " b:" << b << endl;    // a:20 b:10

   // 引用传递,形参会修饰实参
mySwap03(a, b);
cout << "a:" << a << " b:" << b << endl;    // a:20 b:10

system("pause"); return 0;
}

3、引用做函数返回值

作用:引用是可以作为函数的返回值存在的

//数据类型后加&,相当于用引用的方式返回 int& test02() {    // 必须使用静态变量,需加 static 关键字
static int a = 20; return a;
}int main(){    int& ref2 = test02();    system("pause");    return 0;

八、类和对象

1、struct和class区别

在C++中 struct和class唯一的区别就在于 默认的访问权限不同

区别:

struct 默认权限为公共

class 默认权限为私有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值