C++01

输入输出

输入输出流是指由若干字节组成的字节序列,这些字节中的数据按照顺序从一个对象传送到另一个对象。流表示了信息从源到目的端的流动。例如在输出时字节从内存流向输出设备,输入时字节从输入设备流向内存。

  • 输入输出头文件:#include
  • c语言头文件名字风格是 <XXX.h>,c++中头文件风格是不带最后的.h
  • cin 从控制台读入内容到变量。
  • cout 从变量输出内容到控制台。
  • std标准命名空间:C++标准库中的函数或者对象都是在命名空间std中定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;

int main()
{
int a = 1;
cin >> a;
//输出变量
cout << a; //不换行的输出

cout << a << endl; // 换行输出

//输出字符串
cout << "指针2010" <<" "<<"指针2010"<< endl;
return 0;
}

bool

bool类型是c++中的基本数据类型,一种整型类型。

  • 单独占一个字节,取值false(0)或true(1)。
  • 任何非0值转换为true,0转换为false。
  • c语言中没有bool类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main()
{
bool a1 = -1 ; //将被转换为true,非零正负值都转换为true。
bool a2 = 0; //将被转换为false
int b1 = true; //将被转换为1
int b2 = false; //将被转换为0

cout << a1 << endl;
cout << a2 << endl;
cout << b1 << endl;
cout << b2 << endl;
return 0;
}

命名空间(namespace)

::限制符

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
#include<iostream>
// C语言头文件风格:<xxx.h>
// C++头文件风格:<xxx>

// #include<math.h> C
// #include<cmath> C++

using namespace std;
// 1.后续可以省略std::
// 2.只在当前作用域有效

// std标准命名空间:C++标准库中的函数或对象都在命名空间std中定义

// 创建命名空间
/*
namespace 命名空间名称{
...
}
*/

namespace name1 {
int a;
void print(){}
}

namespace name2 {
int a;
}

// 命名空间嵌套定义
namespace name3 {
int n3;
namespace name4 {
int n4;
}
}

int main()
{
// 访问
// 命名空间变量::变量名;
name1::a = 100;
name1::print();

// 作用
// 1.增加标识符的使用率
// 2.多人协作开发避免重定义问题

// 作用域解析运算符::
// 1.命名空间限定:::限定命名空间的名称(std::cin)
// 2.类名限定:类成员访问(后续深入讲解)
// 3.全局作用域:::表示全局作用域(::a,表示全局作用域下的变量a)

using namespace name1;
a = 10; // 正常(name1::a)
using namespace name2;
// a = 10; // 错误,二义性(name1::a或name2::a)
// 作用域不会覆盖

// 命名空间嵌套访问
name3::n3 = 100;
name3::name4::n4 = 200;
using namespace name3;
n3 = 300;
using namespace name3::name4;
n4 = 400;
return 0;
}

new操作符

​ C++中利用new操作符在堆区开辟数据

​ 堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete

​ 函数使用的是栈区,函数结束后自动释放

​ 语法:new 数据类型

​ 利用new创建的数据,会返回该数据对应的类型的指针

​ malloc 返回值为void

示例1: 基本语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int* func()
{
int* a = new int(10);
return a;
}

int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
//利用delete释放堆区数据
delete p;
//cout << *p << endl; //报错,释放的空间不可访问
return 0;
}

示例2:开辟数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//堆区开辟数组
int main() {

int* arr = new int[10];

for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}

for (int i = 0; i < 10; i++)
{
cout << arr[i] << endl;
}
//释放数组 delete 后加 []
delete[] arr;

system("pause");

return 0;
}

new和malloc:C++动态分配(new和malloc的用法及区别)_动态开辟对象指针数组为什么不能用malloc-CSDN博客

指针

定义易混淆:

1
2
3
int* pa; // int类型指针变量pa
int *pa; // int类型指针变量pa
int a, b, * pa; // int类型变量a、int类型变量b、int类型指针变量pa

一句话学懂指针变量

指针变量中放的是谁的地址,*指针变量就是谁

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
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
int* pa = &a;
int* pb = pa;
*pb = b;
b = 6;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
pb = &b;
a = 8;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
*pb = a;
*pa = *pb;
pa = pb;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
return 0;
}

课后习题1:

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
#include<stdio.h>
int main() {
//指针变量中放的是谁的地址,*指针变量就是谁
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
*pb = a;
a = 2;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
*pb = *pa;
pb = pa;
a = 8;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
pb = &a;
*pa = a;
pa = &b;
*pb = b;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
return 0;
}

课后习题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
#include<stdio.h>
int main() {
//指针变量中放的是谁的地址,*指针变量就是谁
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
*pb = a;
*pa = b;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
*pb = *pa;
a = 8;
pb = pa;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
pb = &a;
pa = &b;
a = 5;
*pb = a;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
return 0;
}

二级指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
int *pa = &a;
int *pb = &b;
int** ppa = &pa;
ppa = &pb;
pb = pa;
*ppa = pb;
**ppa = 30;
a = 50;
b = 60;
printf("%d ", a);
printf("%d ", b);
printf("%d ", *pa);
printf("%d ", *pb);
printf("%d ", **ppa);
return 0;
}

C++01
http://yjmanman.github.io/2024/09/14/C++01/
作者
YuJia
发布于
2024年9月14日
许可协议