c++初始记录

1. 常量

使用define或者const来定义常量。
示例1:#define 宏常量

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
#define DAY 7
int main(){
//DAY = 14; //报错,DAY是常量,一旦修改会出现错误。
cout << "一周共有:" << DAY << "天" << endl;
return 0;
}

示例2:const修饰

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main() {
const int month = 12;
//month = 1; //报错,常量不可修改
cout << "一年有" << month << "月" << endl;
return 0;
}

2. 数据类型

2.1 整型

  • short 2字节
  • int 4字节
  • long windows为4字节,Linux:4字节(32位),8字节(64位)
  • long long 8字节

2.2 实型(浮点型)

  • float 4字节 7位有效数字
    float f2 = 3.14f;//不加f 默认3.14是double型,然后将其转化为float。
  • double 8字节 15~16位有效数字
  • 此处有效数字范围不区分小数点前后,默认情况下输出一个小数时显示6位数字。

2.3 科学计数法

  • float f4 = 3e2;//3*10^2;
    float f5 = 3e-2;//3 * 0.1^2

2.4 字符型

  • 存放一个字符时将该字符对应的ASCII码放入内存单元,如’a’ = 97,’A’ = 65。

2.5 转义字符

  • 换行符 \n
  • 反斜杠 \
  • 水平制表符 \t 占八个位置,用于整齐的输出数据。
1
2
3
cout << "aaa\thello world!" << endl;
cout << "aa\thello world!" << endl;
cout << "aaaaa\thello world!" << endl;

2.6 字符串

字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。

  • c语言风格 char 变量名[] = “字符串”。

示例:

1
2
3
//声明和初始化创建一个"Hello"字符串。
char str1[6] = {'H','e','l','l','o'};//数组长度要计算null字符。
char str2[] = {'H','e','l','l','o'};
  • c++关于以null结尾的字符串的函数。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;
#include <cstring>
#define DAY 7

int main() {
cout << "hello world!" << endl;
char str1[11] = "hello";
char str2[11] = "world";
char str3[11];
int len;
int equal;
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;

cout << "strlen(str1):" << strlen(str1) << endl;
cout << "strlen(str2):" << strlen(str2) << endl;

//复制 str1 到 str3
//vs2019中认为strcpy函数是危险的,所以改进为strcpy_s()
strcpy_s(str3, str1);
cout << "strcpy_s(str3, str1): " << str3 << endl;

//连接 str1 和 str2
//vs2019中认为strcat函数是危险的,所以改进为strcat_s()
strcat_s(str1, str2);
cout << "strcat_s(str1, str2): " << str1 << endl;

//字符串长度
len = strlen(str1);
cout << "strlen(str1+str2)" << strlen(str1) << endl;

//strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
equal = strcmp(str1, str2);
cout << "strcmp(str1, str2): " << equal << endl;
cout << "strcmp(str1, str1): " << strcmp(str1, str1) << endl;

//strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
cout << "strchr(str1,e): " << strchr(str1, 'e') << endl;
//cout << "strchr(str1,x): " << strchr(str1, 'x') << endl;

//strstr(str1,str2);
//函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
cout << "strstr(str1,str1)" << strstr(str1, str1) << endl;
system("pause");
return 0;
}

运行结果为:

1
2
3
4
5
6
7
8
9
10
11
12
hello world!
str1: hello
str2: world
strlen(str1):5
strlen(str2):5
strcpy_s(str3, str1): hello
strcat_s(str1, str2): helloworld
strlen(str1+str2)10
strcmp(str1, str2): -1
strcmp(str1, str1): 0
strchr(str1,e): elloworld
strstr(str1,str1)helloworld
  • c++语言风格 string 变量名 = “字符串”。

2.7 布尔类型

  • true 真 1
    false 假 0

3. 运算符

  • c++中两个整数相除结果依然是整数,小数部分去除。
  • 两个小数不可以做取模运算
  • 自增++,自减–

示例:

1
2
3
4
int d4 = 10;
cout << d4++ << endl;//先输出,在加一,输出 10
cout << d4 << endl; //输出11
cout << ++d4 << endl;//先加一,后输出,输出 12
  • 三目运算符 表达式1?表达式2:表达式3

示例:

1
2
3
4
5
6
7
8
9
10
11
int a = 10;
int b = 2;
int c = 0;
c = (a > b ? a : b);
cout << "c = " << c << endl;
cout << (a > b ? a : b) << endl;

//在c++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;//结果将100赋值给大的数
cout << "a = " << a << endl;
cout << "b = " << b << endl;

4. 程序结构

4.1 break

跳出选择结构或循环结构。

  • 出现在switch语句中,终止case并跳出switch。
  • 出现在循环语句中,跳出最近的循环语句。

4.2 continue

在循环语句中,跳过本次循环中余下尚未执行的语句,继续进行下一次循环。
示例:

1
2
3
4
5
6
7
for (int i = 0;i < 100;i++) {
//奇数输出
if (i % 2 == 0) {
continue;
}
cout << i << endl;
}

4.3 goto

goto 标记

  • 如果标记存在,执行带goto语句时,会跳转到标记的位置。

示例:

1
2
3
4
5
6
    cout << "1" << endl;
goto FLAG;
cout << "3" << endl;
FLAG:
cout << "2" << endl;
//不会打印3

5. 数组

5.1 一维数组

  • 一维数组定义方式
    1、数据类型 数组名[数组长度];
    2、数据类型 数组名[数组长度] = {值1,值2…};
    3、数据类型 数组名[] = {值1,值2….};

  • 一维数组名
    1、统计整个数组在内存中的长度
    2、获取数组在内存中的首地址

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//统计整个数组在内存中的长度
cout << "整个数组所占内存空间为:" << sizeof(arr) << endl;
cout << "每个数组元素所占内存空间为:" << sizeof(arr[0]) << endl;
cout << "数组元素个数为:" << sizeof(arr)/sizeof(arr[0]) << endl;

//获取数组在内存中的首地址
//将int的变量以16进制形式输出 cout << hex << 变量名;
cout << "数组首地址为:" << hex << (int)arr << endl;
cout << "数组中第一个元素的地址为:" << &arr[0] << endl;
cout << "数组中第一个元素的地址为:" << &arr[1] << endl;
//数组名是常量,是首地址,不可以赋值操作
return 0;
}

运行结果为:

1
2
3
4
5
6
整个数组所占内存空间为:40
每个数组元素所占内存空间为:4
数组元素个数为:10
数组首地址为:4ff758
数组中第一个元素的地址为:004FF758
数组中第一个元素的地址为:004FF75C

5.2 二维数组

  • 二维数组定义方式:
1
2
3
4
5
6
二维数组定义方式:
1、数据类型 数组名 [行数][列数];
2、数据类型 数组名 [行数][列数] = {{数据1,数据2、},{数据3,数据4}};
3、数据类型 数组名 [行数][列数] = {数据1,数据2,数据3};
4、数据类型 数组名 [][列数] = {数据1,数据2,数据3};
以上四种定义方式,第二种更加直观,提高代码的可读性
  • 二维数组名
    1、查看二维数组所占内存空间
    2、获取二维数组首地址

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
int main() {
int arr[2][3] =
{
{1,2,3},
{4,5,6}
};
//1、查看内存空间
cout << "二维数组所占内存空间为" << sizeof(arr) << "个字节" << endl;
cout << "二维数组第一行所占内存空间为" << sizeof(arr[0]) << "个字节" << endl;
cout << "二维数组第一个元素占用内存为" << sizeof(arr[0][0]) << "个字节" << endl;

cout << "二维数组行数:" << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "二维数组列数:" << sizeof(arr[0]) / sizeof(arr[0][0])
<< endl;

//2、地址
cout << "二维数组首地址:" << (int)arr << endl;
cout << "二维数组第一行首地址:" << (int)arr[0] << endl;
cout << "二维数组第一个元素的首地址:" << (int)&arr[0][0] << endl;
cout << "二维数组第二行首地址:" << (int)arr[1] << endl;

return 0;
}

运行结果为:

1
2
3
4
5
6
7
8
9
二维数组所占内存空间为24个字节
二维数组第一行所占内存空间为12个字节
二维数组第一个元素占用内存为4个字节
二维数组行数:2
二维数组列数:3
二维数组首地址:4126964
二维数组第一行首地址:4126964
二维数组第一个元素的首地址:4126964
二维数组第二行首地址:4126976