cpp学习笔记01

由于时效问题,该文某些代码、技术可能已经过期,请注意!!!本文最后更新于: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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include<iostream>
#include<string>
using namespace std;


// 函数分文件
// 1、创建 .h 后缀名的头文件
// 2、创建 .cpp 后缀名的源文件
// 3、在头文件中写函数的声明
// 4、在源文件中写函数定义
#include "swap.h"

//常量定义方式
//1、 #define 宏常量
//2、 const 修饰的变量

//1、 #define 定义常量
#define Day 7

// struct 自定义数据结构关键字,结构体指针通过 -> 获取属性数据

//栈区数据(局部变量、形参等)由编译器管理,堆区数据(new关键字开辟内存存放数据,可使用delete删除)由程序员管理

// 使用new创建数据:new返回的是 该数据类型的指针
int *p = new int(10);

// 函数声明:可以提前告诉编译器函数的存在, 声明可以多次,定义只有一次
int max(int a, int b);

// 函数:值传递不修改实参,地址传递修改实参
void swap1(int a, int b); // 值传递
void swap2(int *p1, int *p2); // 地址传递 swap2(&a, &b)

void bubbleSort(int arr[], int len)
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len -i -1; j++)
{
if (arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}

}
}
}


int main(int argc, char const *argv[])
{
//2、 const 修饰的变量
const int month = 12; // const 修饰的变量也是常量
cout << Day << month << endl;

// int a = 10;
// sizeof 计算内存大小
// cout << sizeof(a) << endl;

// 默认情况小数显示6位有效数字
float f = 3.14f; // 默认双精度,数字后加f为单精度

//字符型变量用于显示单个字符
char c = 'a'; // 只能单引号
cout << (int)c << endl; // (int) 转换 c 为 ascii 值

cout << "aa\tbb" << endl;

// c 风格字符串 chat 字符串名 []
char str1[] = "hello";
// c++ 风格字符串
string str2 = "hello";
cout << str1 << "\t" << str2 <<endl;

// 两个整数相除结果还是整数(向下取整)
cout << 10 / 20 << endl;
// % 取膜运算(取余数)

// 三目运算符
// 表达式1 ?表达式2 :表达式3 1真 执行2 ,否则 执行3
// c++ 中 三目运算符返回的是变量,可以继续赋值
int a = 10; int b = 20;
(a > b ? a : b) = 100; // 对 b 重新赋值 100

// goto 语句
// 如果goto的标记存在,则直接跳转到标记处
goto FLAG;
cout << "跳过了" << endl; // 该语句不执行
FLAG:
cout << "执行" << endl;

// 数据类型 数组名[数组长度];
int arr[2] = {1, 2}; // 数组名 arr 是常量,不可进行赋值操作,如 arr = 10

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

// 指针定义:数据类型 * 指针变量名;
// 让指针记录变量的地址
int g = 10;
int *p = &g; // 等同于下面两行代码
// int *p;
// p = &g;

// 指针前加 * 号代表 解引用
cout << *p << endl;
*p = 100; // 可以进行赋值修改变量的值
cout << g << endl;

// 空指针:指针变量指向内存中编号为0的空间
// 用途:初始化变量
// 注:空指针不可以进行访问(0-255内存编号为系统占用)
int *p1 = NULL;

// 野指针:指向非法的内存空间

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

// 指针常量:指针的指向不可以修改,指针指的值可以修改
int * const p3 = &a;

// const修饰指针,又修饰常量: 指针的指向不可以修改,指针指的值不可以修改
const int * const p4 = &a;

// 指针和数组
int arr2[2] = {1, 2};
int *p5 = arr2; // arr2 数组首地址

cout << *p5 << endl; //可获取arr第一个值
p5++;
cout << *p5 << endl; //可获取arr第2个值

return 0;
}

int max(int a, int b){
return a > b ? a : b;
}



本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!