1. 声明静态数组后一定要进行初始化,否则里面的值都是未知的
int main()
{
int ia[3] = {0}; // 这虽然只是给第一个元素赋了值,但剩余未赋值的元素都会初始化为0
char ca[3] = {0};
double da[3];
bool ba[3];
short sa[3];
float fa[3];
for(auto & i : da){
cout << i << endl;
}
return 0;
}
输出:
6.95128e-310
4.63759e-310
0
2. C++ 数组指针和数组类型
- 数组类型和数组指针(数组名)不是一种类型,只是恰好指向的地址相同而已
- 数组名是指针常量(int * const),代表数组中第一个元素的地址
- 数组类型代表整个数组
int main()
{
int arr[10];
cout << arr << endl;
cout << arr + 1 << endl;
cout << "----------" << endl;
cout << &arr << endl;
cout << &arr + 1 << endl;
return 0;
}
输出:
0x7fff7fd65c20
0x7fff7fd65c24
----------
0x7fff7fd65c20
0x7fff7fd65c48
定义数组类型:
// 方法一:定义一个数组类型
typedef int(ARRAY_INT_10)[10];
// 方法二:定义一个数组指针(不推荐这种写法)
typedef int(*ARRAY_INT_10_P)[10];
int main()
{
int arr[10];
// 方法一:
ARRAY_INT_10 *arr1 = &arr;
for(int i = 0; i < 10; i++){
//arr2[i] = i; // 错误 cannot convert ‘int*’ to ‘int (*)[10]’
// arr 是数组指针,arr1 是数组名
(*arr1)[i] = i; // 正确,要对 arr1 降级
}
for(int i = 0; i < 10; i++){
cout << arr[i] << endl;
}
cout << "-----" << endl;
// 方法二:
ARRAY_INT_10_P arr2 = &arr;
for(int i = 0; i < 10; i++){
cout << (*arr2)[i] << endl;
}
cout << "+++++" << endl;
// 方法三:
int(*arr3)[10] = &arr;
for(int i = 0; i < 10; i++){
cout << (*arr3)[i] << endl;
}
return 0;
}
错误输出:
main.cpp:50:26: error: cannot convert ‘int*’ to ‘int (*)[10]’ in initialization
50 | ARRAY_INT_10 *arr2 = arr;
| ^~~
| |
| int*
输出:
0
1
2
3
4
5
6
7
8
9
-----
0
1
2
3
4
5
6
7
8
9
+++++
0
1
2
3
4
5
6
7
8
9