C++ 基础与核心编程
C++ 基础
sizeof 和 strlen 的区别
strlen 是 C 语言中统计字符串长度的关键字,其统计遇到的第一个 \0 前面的有效字符(不论显示还是隐式)。sizeof 统计占据的所有内存字节数,包含显示 \0 和隐式 \0。
三目运算符
表达式 1 ? 表达式 2 : 表达式 3;
一维数组名作用
- 统计整个数组的字节数;
- 数组元素的首地址;
- 数组地址。
数组首地址与数组地址在值上是相等的,但是两者存在本质的区别,如下面代码中的解释说明:
int arr[3] = {10, 20, 30};
// 1. 数组名:统计数组字节大小
cout << sizeof(arr); // 输出 12(3 个 int,每个 4 字节)
cout << sizeof(arr[0]); // 输出 4(首元素的大小)
// 2. 数组地址和数组元素的首地址
// arr 和&arr 两者在值上是相等的,但是本质不同
// arr(首元素地址)的类型是 int*(指向 int 的指针),步长是 sizeof(int)=4 字节。
// &arr(整个数组地址)的类型是 int (*)[3](指向 int[3] 数组的指针),步长是 sizeof(int[3])=12 字节
cout << "&arr(整个数组地址):" << &arr << endl;
cout << "arr(首元素地址):" << arr << endl;
二维数组名作用
- 统计整个数组的字节数;
- 数组名作为'指向一维数组的指针'(默认隐式转换,这里的维度看行数)。例如
int[2][3],它是'包含 2 个元素的数组',每个元素又是'包含 3 个 int 的数组';arr会隐式转换为'指向其第一个一维子数组的指针',类型是int (*)[3]。 - 整个二位数组的地址:
&数组名 - 一维数组的数组名:数组名 + 下标
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
// 1. 数组名:统计整个二位数组字节大小
cout << (arr);
(*p)[] = arr;
cout << (*p)[];
cout << (*(p))[];
(*p_arr)[][] = &arr;
* p_elem = arr[];
cout << *p_elem;


