最后
笔者已经把面试题和答案整理成了面试专题文档
1,C++初始
1.1变量
作用:给一段指定的内存空间起名,方便操作这段内存。
语法:数据类型 变量名=初始值
int a=10;
1.2常量
作用:用于记录程序中不可更改的数据
两种方式
- #define 宏定义:#define 常量名 常量值(通常在文件上方定义,表示一个常量)
- const修饰的变量:const 数据类型 常量名=常量值(通常在变量定义前加上关键字const,修饰该变量为常量,不可更改)
#define a 10
const int b=10;
1.3关键字
作用:关键字是C++中预先保留的单词(标识符)
在定义变量或者常量的时候,不要用关键字,否则会产生歧义
int char long if case const define
1.4标识符命名规则
作用:C++规定给标识符(常量,变量)命名时,遵循一定的规则
- 标识符不能是关键字
- 标识符只能由字母,数字,下划线组成
- 第一个字母必须是字母或下滑线
- 标识符中字母区分大小写
int int=10;(错误)
int a=10; int a1=10; int a1_=10;(正确) int a*=10(错误)
int b1=10; int _1=10; (正确) int 1_=10(错误)
int c=10不代表此时C=10
2,数据类型
在创建一个变量或者常量时,必须要指出相应的数据类型,否则无法给变量分配内存(数据类型就是为了分配合适的空间)
2.1整型
作用:整型变量表示的是整数类型的数据
C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同
short(短整型) 2字节 -215——215-1 int(整型) 4字节 -231——231-1 long(长整型) windows为4,linux下32位4,64位8 -231——231-1 long long(长长整型) 8字节 -263——263-1 (1字节 = 二进制8位 / 十进制3位 / 十六进制2位)
2.2sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法:sizeof(数据类型/变量)
int a=10;
可以得出:sizeof(int)=4,sizeof(a)=4
2.3实型(浮点型)
作用:用于表示小数
浮点型变量分为两种
- 单精度float
- 双精度double
float 4字节 7位有效数字 double 8字节 15-16位有效数字 有效数字是指在一个数中,从该数的第一个非零数字起,直到末尾数字称为有效数字,如0.123的有效数字是123。
float a=3.14f;(float类型定义的数据最好后面加上f,这样和double形成区别)
科学计数法
float a=1e2; //1*10^2
float b=1e-2; //1*0.1^2
2.4字符型
作用:字符型变量用于显示单个字符
语法:char ch=‘a’;(用单引号,单引号内只能有一个字符,不能是字符串)
- C和C++中字符型变量只占1个字节
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCLL编码放到储存单元
主要就记住A=65,a=97
2.5转义字符
作用:用于表示一些不能显示出来的ASCLL字符
现阶段我们常用的转义字符有:\n(技术太差,我就用这一个);\(想要输出’',就需要用\;cout<<“\”);\t正常8位
2.6字符串类型
作用:用于表示一串字符
两种风格:
C风格字符串:char 变量名[]=“字符串值”
C++风格字符串:string 变量名=“字符串值”(需要加上#include头文件)
char a[]=“abcdef”;
string b=“abcdef”;
2.7布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值(只要是非0的值都代表真)
- true——真(本质是1)
- false——假(本质是0)
bool类型只占1个字节大小
注意:使用bool类型的时候,初始化时一定要赋初值,不然输出结果为204。因为程序在Debug模式下,未对变量初始化,写入内存的是0xcc ,所以最后显示的结果为204。如果已经赋初值,则结果才是1或者0。
3,运算符
作用:用于执行代码的运算
算数运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
3.1算术运算符
作用:用于处理四则运算(除了正常的正负加减乘,下面介绍一些常用的)
- “ / ” 除(两个数相除,取整数部分,且除数不为零)
int a=10,b=5,c=3; 可以得出a/b=2,a/c=3;
- “ % ” 取模(两个数相除,取余数部分)
int a=10,b=5,c=3; 可以得出a%b=0,a%c=1;
- “ ++ ” 前置递增(先自增,后运算)
int a=10,b; b=++a; 则b=11,a=11;
- “ ++ ” 后置递增(先运算,后自增)
int a=10,b; b=a++; 则b=10,a=11;
- “ – ” 前置递减(先自增,后运算)
int a=10,b; b=–a*2; 则b=18,a=9;
- “ – ” 后置递减(先运算,后自增)
int a=10,b; b=a–*2; 则b=20,a=9;
3.2赋值运算符
作用:用于将表达式的值赋给变量
运算符 | 术语 | 示例 | 结果 |
= | 赋值 | a=b | a=b |
+= | 加等于 | a+=b | a=a+b |
-= | 减等于 | a-=b | a=a-b |
*= | 乘等于 | a*=b | a=a*b |
/= | 除等于 | a/=b | a=a/b |
%= | 模等于 | a%=b | a=a%b |
3.3比较运算符
作用:用于表达式的比较,并返回一个真值或假值
int a=1,b=2; | |||
运算符 | 术语 | 示例 | 结果 |
== | 相等于 | a==b | 0 |
!= | 不等于 | a!=b | 1 |
< | 小于 | a<b | 1 |
> | 大于 | a>b | 0 |
<= | 小于等于 | a<=b | 1 |
>= | 大于等于 | a>=b | 0 |
3.4逻辑运算符
作用;用于根据表达式的值返回真值(1)或假值(0)
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 如果a为假,则!a为真,如果a为真,则!a为假 |
&& | 与 | a&&b | 如果a和b都为真,则结果为真,否则为假 |
或 |
4,程序流程结构
最基本的三种结构:顺序结构,选择结构,循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1选择结构
4.1.1if语句
作用:执行满足条件的语句
if语句的三种形式
- 单行格式if语句(满足条件则执行语句,不满足则结束):(一条语句)
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "输入a的值:";
cin >> a;
if (a > 5)
{
cout << "a大于5"<<endl;
}
system("pause");
return 0;
}
- 多行格式if语句( if(条件) {条件满足执行的语句} else{条件不满足执行的语句}):(两条语句)
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "输入a的值:";
cin >> a;
if (a > 5)
{
cout << "a大于5"<<endl;
}
else
{
cout << "a小于等于5"<<endl;
}
system("pause");
return 0;
}
- 多条件if语句( if(条件1) {条件1满足执行的语句} else if(条件2) {条件2满足执行的语句}…else {都不满足执行语句):(n条语句)
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "输入a的值:";
cin >> a;
if (a > 15)
{
cout << "a大于15"<<endl;
}
else if (a>10)
{
cout << "a大于10,小于等于15"<<endl;
}
else if (a>5)
{
cout << "a大于5,小于等于10" << endl;
}
else
{
cout << "a小于等于5" << endl;
}
system("pause");
return 0;
}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "输入a的值:";
cin >> a;
if (a > 15)
{
cout << "a大于15"<<endl;
}
else if (a>10)
{
if (a > 13)
{
cout << "a大于13,小于等于15" << endl;
}
else
{
cout << "a大于10,小于等于13" << endl;
}
}
else if (a>5)
{
cout << "a大于5,小于等于10" << endl;
}
else
{
cout << "a小于等于5" << endl;
}
system("pause");
return 0;
}
4.1.2三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式a ? 表达式b:表达式c (如果表达式a的值为真,则执行b返回b的值;a为假,则执行c返回C的值)
int a=10,b=5,c; c=(a>b? a:b); 则c等于a的值,等于10;
int a=10,b=5; (a>b ? a:b)=20;则a=20,b=5;
4.1.3 switch语句
语法:
switch ( 变量表达式 )
{
case 常量1 :语句;break;
case 常量2 :语句;break;
…
case 常量n:语句;break;
default :语句;break;
}
#include<iostream>
using namespace std;
int main()
{
int a;
cout << "输入级别:";
cin >> a;
switch (a)
{
case 3:
cout << "优秀!";
break;
case 2:
cout << "良好!";
break;
case 1:
cout << "及格!";
break;
default:
cout << "差!";
break;
}
system("pause");
return 0;
}
4.2循环结构
4.2.1 while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句} :先条件,后语句
(只要循环条件为真,就执行循环语句)
#include<iostream>
using namespace std;
int main()
{
int a = 1;
while (a <= 10)
{
cout << a << endl;
a++;
}
system("pause");
return 0;
}
4.2.2 do…while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句} while(循环条件); :先语句,后条件
(与while不同的是,会先执行一次循环语句,再判断条件)
#include<iostream>
using namespace std;
int main()
{
int a = 1;
do{
cout << a << endl;
a++;
} while (a <= 10);
system("pause");
return 0;
}
4.2.3for循环语句
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;} :表达式中间用分号隔开
#include<iostream>
using namespace std;
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
cout << i << endl;
}
system("pause");
return 0;
}
4.2.4嵌套循环
作用:在嵌套里面嵌套一层循环
eg:输出一个10*10的星星方格
#include<iostream>
using namespace std;
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
{
cout<<" * ";
}
cout << endl;
}
system("pause");
return 0;
}
4.3跳转语句
4.3.1break语句
作用:用于跳出选择结构或者循环结构
break使用的时机:
- 出现在switch条件语句中,作用终止case并跳出switch
- 出现在while循环语句中,作用是跳出当前的循环语句
- 出现在嵌套循环中,跳出最近的内层循环语句
4.3.2continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
4.3.3goto语句(不推荐)
作用:可以无条件跳转语句
语法:goto 标记;(如果标记的名称存在,执行到goto语句时,会跳转到标记的位置)
#include<iostream>
using namespace std;
int main()
{
cout << "aaaa" << endl;
cout << "bbbb" << endl;
goto AL;
cout << "cccc" << endl;
cout << "dddd" << endl;
AL:
cout << "eeee" << endl;
system("pause");
return 0;
}
5,数组
数组就是一个集合,里面存放了相同类型的数据元素
- 数组中的每个元素都是相同的数据类型
- 数组是由连续的内存位置组成的
5.1一维数组
5.1.1一维数组的定义方式
三种定义方式
- 数据类型 数组名[数组长度];
- 数据类型 数组名[数组长度]={值1,值2,…};
- 数据类型 数组名[ ]={值1,值2,…}; //系统会根据元素的个数,自己计算出数组的大小
#include<iostream>
using namespace std;
int main()
{
int a[5];
for (int i=0; i < 5; i++)
{
cout << a[i];
}
cout << endl;
int b[5] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 5; i++)
{
cout << b[i];
}
cout << endl;
int c[] = { 1, 2, 3, 4, 5 }; //自己会计算出数组的大小
cout << endl; for (int i = 0; i < 5; i++)
{
cout << c[i];
}
cout << endl;
system("pause");
return 0;
}
5.1.2一维数组组名
一维数组名称的用途:
- 可以统计整个数组在内存中的长度
- 可以获取数组在内存中的首地址
#include<iostream>
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
cout << "数组长度为" << sizeof(a) << endl;
cout << "数组个数为" << sizeof(a) / sizeof(int) << endl;
cout << "a的地址为" << a << endl;
cout << "a[0]的地址为" << &a[0] << endl;
system("pause");
return 0;
}
5.2二维数组
就是在一维数组上多加了一个维度
5.2.1二维数组的定义方式
四种方法
- 数据类型 数组名[行数][列数];
- 数据类型 数组名[行数][列数]={{值1,值2},{值3,值4}};(推荐,更加直观)
- 数据类型 数组名[行数][列数]={值1,值2,值3,值4};
- 数据类型 数组名[ ][列数]={值1,值2,值3,值4}; (此处也是系统会根据元素个数,自动算出行数大小)
#include<iostream>
using namespace std;
int main()
{
//数据类型 数组名[行数][列数];
int a[2][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << a[i][j];
}
}
cout << endl;
//数据类型 数组名[行数][列数]={{值1,值2},{值3,值4}};(推荐,更加直观)
int b[2][2] = { { 1, 2 }, { 3, 4 } };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << b[i][j];
}
}
cout << endl;
//数据类型 数组名[行数][列数]={值1,值2,值3,值4};
int c[2][2] = { 1, 2, 3, 4 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << c[i][j];
}
}
cout << endl;
//数据类型 数组名[ ][列数]={值1,值2,值3,值4};
int d[][2] = { 1, 2, 3, 4 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << d[i][j];
}
}
cout << endl;
system("pause");
return 0;
}
5.2.2二维数组组名
- 查看二维数组所占内存空间
- 获取二维数组首地址
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
int j = 0; j < 2; j++)
{
cout << c[i][j];
}
}
cout << endl;
//数据类型 数组名[ ][列数]={值1,值2,值3,值4};
int d[][2] = { 1, 2, 3, 4 };
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
cout << d[i][j];
}
}
cout << endl;
system("pause");
return 0;
}
**5.2.2二维数组组名**
* 查看二维数组所占内存空间
* 获取二维数组首地址
### 那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
* 并发编程面试题汇总
* JVM面试题汇总
* Netty常被问到的那些面试题汇总
* Tomcat面试题整理汇总
* Mysql面试题汇总
* Spring源码深度解析
* Mybatis常见面试题汇总
* Nginx那些面试题汇总
* Zookeeper面试题汇总
* RabbitMQ常见面试题汇总
JVM常频面试:
[外链图片转存中...(img-3v0W1Oxj-1714882038193)]
Mysql面试题汇总(一)
[外链图片转存中...(img-7mh3TzR0-1714882038193)]
Mysql面试题汇总(二)
[外链图片转存中...(img-LnXhOZgQ-1714882038194)]
Redis常见面试题汇总(300+题)
[外链图片转存中...(img-FMvClld9-1714882038194)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**