220223_C++_语法整理_最最最最最入门阶段(至指针前)
C++的基础语法入门笔记。
来源是runnoob的菜鸟教程等网络资料。
绝非原创,仅作自学自查之用。
Hello,World!
#include <iostream>
// 包含了头文件 <iostream>
// 头文件包含了程序中必需的或有用的信息
using namespace std;
// 告诉编译器使用 std 命名空间。
// main()是主函数,程序从这里开始执行。
int main()
{
cout << "Hello, world!" << endl;
// 会在屏幕上显示消息 "Hello World".
return 0;
// 终止 main( )函数,并向调用进程返回值 0。
}
输出:
Hello, world!
① 上面这段程序中,包含了头文件
头文件包含了程序中必需的或有用的信息。
入门常识
-
分号
- 分号是语句结束符,每个语句必须以分号结束。它表明一个逻辑实体的结束。
C++ 不以行末作为结束符的标识,因此,可以在一行上放置多个语句。
- 分号是语句结束符,每个语句必须以分号结束。它表明一个逻辑实体的结束。
-
语句块
- 语句块是一组使用大括号括起来的按逻辑连接的语句。
-
关键字(保留字)
-
这些关键字不能作为常量名、变量名或其他标识符名称。
-
asm const else friend new short this unsigned auto const_cast enum goto operator signed throw using bool continue explicit if private sizeof true virtual break default export inline protected static try void case delete extern int public static_cast typedef volatile catch do false long register struct typeid wchar_t char double float mutable reinterpret_cast switch typename while class dynamic_cast for namespace return template union
-
-
三字符组
-
三字符组与双字符组是程序设计语言(如C语言)中3个或者2个字符的序列,在编译器预扫描源程序时被替换为单个字符。以解决某些键盘不能输入某些编程必须的字符问题。
-
三字符组 ??= ??/ ??' ??( ??) ??! ??< ??> ??- 替换 # \ ^ [ ] | { } ~
-
-
注释
- 单行//
- 多行/* xxxxxxx */
数据类型
计算机信息量单位
11010100:一个8位(8-bit)二进制数、占一字节(Byte)。
字通常由几个字节构成。
例如286微机的字由2个字节组成,它的字长为16位;
486微机的字由4个节组成,它的字长为32位。
1 Byte(B)= 8 bit
1 Kilo Byte(KB) = 1024B
1 Mega Byte(MB) = 1024 KB
1 Giga Byte (GB)= 1024 MB
1 Tera Byte(TB)= 1024 GB
1 Peta Byte(PB) = 1024 TB
不同数据类型
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
类型 | 描述 |
---|---|
bool | 存储值 true 或 false。 |
char | 通常是一个字符(八位)。这是一个整数类型。 |
int | 对机器而言,整数的最自然的大小。 |
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 2^23 = 8388608,一共七位,这意味着最多能有7位有效数字。 |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。 |
void | 表示类型的缺失。 |
wchar_t | 宽字符类型。 |
\\ 运用类似的代码可以查询不同数据类型的占用空间与数据范围
\\ 以bool型为例
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
定义变量
数据类型 变量名 = 初始值;
int a = 1;
cout << a << endl;
定义常量
①#define 宏常量
#include<iostream>
#define aaa 7
using namespace std;
int main()
{
cout << "aaa=" << aaa << endl;
return 0;
}
②const 修饰变量
const int aaa = 2;
这两者本质上是不同的。
简单来说,#define是不带类型的立即数(不在内存,也不在寄存器,而是在内嵌在指令中的操作数),没有类型检查,会导致一些计算错误。
字符与字符串
字符型变量char用于显示单个字符,用单引号 ' ' 引起。
字符串型变量string用于显示单个字符,用双引号 " " 引起。
char a = '2';
char s2[] = "123141241";
string s = "12aaaaasdasdaaaa3";
ASCII码表
ASCII值 | 控制字符 | ASCII值 | 字符 | ASCII值 | 字符 | ASCII值 | 字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
// 强制转换char类型至int,查看ASCII值
#include<iostream>
using namespace std;
int main()
{
char a = '1';
cout << (int)a << endl;
return 0;
}
转义字符
表示一些不能显示出来的ASCII字符。
转义字符 | 含义 | ASCII码值(十进制) |
---|---|---|
\a | 警报 | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | **水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符"" | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 数字0 | 000 |
\ddd | 8进制转义字符,d范围0~7 | 3位8进制 |
\xhh | 16进制转义字符,h范围09,af,A~F | 3位16进制 |
输入与输出
这里只简单举几个例子。
① cout cin
C++ 库定义了大量的类(Class),cout 和 cin 就分别是 ostream和 istream 类的对象,
由标准库的开发者提前创建好的,可以直接拿来使用。
使用cin与cout需要包含头文件iostream。
cout和cin是ostream和istream的对象
使用 cout 进行输出时需要紧跟<<
运算符,使用 cin 进行输入时需要紧跟>>
运算符
其中endl
表示换行,与C语言里的\n
作用相同
#include<iostream>
using namespace std;
int main()
{
int x;
float y;
cout << "Please input an int number:" << endl;
cin >> x;
return 0;
}
② printf scanf
#include<iostream>
using namespace std;
int main()
{
int a;
scanf("%d",&a);
printf("a=%d\n",a);
float b;
scanf("%f",&b);
printf("b=%f\n",b);
double c;
scanf("%lf",&c);
printf("c=%lf\n",c);
printf("c=%3.5lf\n",c);
return 0;
}
// 输入11
// 12345678912345678900000
// 123456789.123456791
// a=11
// b=12345679377913908035584.000000
// c=123456789.123457
// c=123456789.12346
运算符
运算符类型 | 作用 | |
---|---|---|
算术运算符 | 用于处理四则运算 | + - * / % ++ -- |
赋值运算符 | 用于将表达式的值赋给变量 | = += -= *= /= %= |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 | == != < > <= >= |
逻辑运算符 | 用于根据表达式的值返回真值或假值 | ! && || |
三种结构
1. 顺序结构
没啥可说的。
2. 选择结构
语句 | 描述 |
---|---|
if 语句 | 一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 |
if...else 语句 | 一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。 |
嵌套 if 语句 | 您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 |
switch 语句 | 一个 switch 语句允许测试一个变量等于多个值时的情况。 |
嵌套 switch 语句 | 您可以在一个 switch 语句内使用另一个 switch 语句。 |
if(boolean_expression)
{ }
else
{ }
#include <iostream>
using namespace std;
int main ()
{
char grade;
cout << "Please input an int number:" << endl;
cin >> grade;
switch(grade)
{
case 'A' :
cout << "很棒!" << endl;
break;
case 'B' :
cout << "还行" << endl;
case 'C' :
cout << "不太好" << endl;
break;
default :
cout << "无效的成绩" << endl;
}
cout << "您的成绩是 " << grade << endl;
return 0;
}
// 输入1
// Please input an int number:
// 无效的成绩
// 您的成绩是 1
// 输入A
// Please input an int number:
// 很棒!
// 您的成绩是 A
3. 循环结构
while
while()
{}
do{...} while(...)
do
{....
} while
for
for(int i = 0; 条件; 末尾循环体)
{
循环语句;
}
跳转语句
break
跳出选择结构与循环结构。
break;
continue
continue;
跳过本次循环,进入下一次循环。
goto
无条件跳转语句。
goto FLAG
.......
FLAG:
......
建议少用goto。
数组
定义数组
C当中,数组从0开始编号。
一维数组
int a[10];
//利用下标赋值
a[0] = 100;
a[1] = 99;
a[2] = 85;
//利用下标输出
cout << score[0] << endl;
cout << score[1] << endl;
cout << score[2] << endl;
#include <iostream>
using namespace std;
int main()
{
int a[4] = { 10, 2,}; // 这里也可写a[] = {xx,xx,xx,xx}
for (int i = 0; i < 5; i++)
{
cout <<"序号 "<<i<<" " << a[i] << " ";
}
system("pause");
return 0;
}
//序号 0 10 序号 1 2 序号 2 0 序号 3 0 序号 4 -858993460 请按任意键继续. . .
// ☆ 可见a[10]被分配了其他数字,但没有使用价值。a[11]会报错。
二维数组
#include <iostream>
using namespace std;
int main()
{
int a[3][2] =
{
{1,2},
{11,22},
{111,222}
};
//当然可以一个个赋值
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
cout << j << "行" << i << "列 " << a[i][j] << "\t";
}
cout << endl;
}
cout << "二维数组内存字节数: " << sizeof(a) << endl;
cout << "二维数组一行内存字节数: " << sizeof(a[0]) << endl;
cout << "二维数组元素内存字节数: " << sizeof(a[0][0]) << endl;
cout << "二维数组首地址:" << a << endl;
cout << "二维数组第一行地址:" << a[0] << endl;
cout << "二维数组第二行地址:" << a[1] << endl;
cout << "二维数组第二行地址:" << a[2] << endl;
cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
system("pause");
return 0;
}
//0行0列 1 1行0列 2
//0行1列 11 1行1列 22
//0行2列 111 1行2列 222
函数
返回值类型 函数名 (参数列表)
{
函数体语句
return表达式
}
---------------------
举例:求和函数
#include <iostream>
using namespace std;
int add(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
int main()
{
int a = 1;
int b = 2;
cout << "sum = " <<add(a,b)<<endl;
system("pause");
return 0;
}
---------------------
举例:交换数字
#include <iostream>
using namespace std;
void swap(int num1, int num2)
{
cout << "交换前:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:" << endl;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
//return ; 当函数声明时候,不需要返回值,可以不写return
}
int main()
{
int a = 1;
int b = 2;
swap(a, b);
system("pause");
return 0;
}
函数常见的形式:① 无参数无返会值;② 有参数无返会值;③ 无参数有返会值;④ 有参数有返会值。
c++中,常见的分文件使用函数:
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义
//swap.h文件
#include<iostream>
using namespace std;
//实现两个数字交换的函数声明
void swap(int a, int b);
//swap.cpp文件
#include "swap.h"
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
变量作用域
局部变量
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。
全局变量
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量