C++的基础语法入门笔记。
来源是runnoob的菜鸟教程等网络资料。
绝非原创,仅作自学自查之用。
#include <iostream> // 包含了头文件 <iostream> // 头文件包含了程序中必需的或有用的信息 using namespace std; // 告诉编译器使用 std 命名空间。 // main()是主函数,程序从这里开始执行。 int main() { cout << "Hello, world!" << endl; // 会在屏幕上显示消息 "Hello World". return 0; // 终止 main( )函数,并向调用进程返回值 0。 }
输出:
Hello, world!
① 上面这段程序中,包含了头文件
头文件包含了程序中必需的或有用的信息。
分号
语句块
关键字(保留字)
这些关键字不能作为常量名、变量名或其他标识符名称。
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个字符的序列,在编译器预扫描源程序时被替换为单个字符。以解决某些键盘不能输入某些编程必须的字符问题。
三字符组 | ??= | ??/ | ??' | ??( | ??) | ??! | ??< | ??> | ??- |
---|---|---|---|---|---|---|---|---|---|
替换 | # | \ | ^ | [ | ] | | | { | } | ~ |
注释
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值 | 字符 |
---|---|---|---|---|---|---|---|
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
运算符类型 | 作用 | |
---|---|---|
算术运算符 | 用于处理四则运算 | + - * / % ++ -- |
赋值运算符 | 用于将表达式的值赋给变量 | = += -= *= /= %= |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 | == != < > <= >= |
逻辑运算符 | 用于根据表达式的值返回真值或假值 | ! && || |
没啥可说的。
语句 | 描述 |
---|---|
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
while() {}
do {.... } while
for(int i = 0; 条件; 末尾循环体) { 循环语句; }
跳出选择结构与循环结构。
break;
continue;
跳过本次循环,进入下一次循环。
无条件跳转语句。
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++中,常见的分文件使用函数:
//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; }
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。下面的实例使用了全局变量和局部变量