int arr[5] = {11,22,33,44,55}; cout << arr[5] << endl; cout << arr[0] << endl; cout << arr[0] + 1 << endl; cout << arr + 1 << endl; cout << *(arr + 1) << endl; cout << *arr + 1 << endl; cout << &arr[0] + 1 << endl; 解释一下每一行代码为什么会输出这些内容
时间: 2023-08-20 21:21:27 浏览: 341
```c++
int arr[5] = {11, 22, 33, 44, 55};
```
这行代码定义了一个包含5个整数的数组,并初始化了这个数组的元素。
```c++
cout << arr[5] << endl;
```
这行代码会输出数组中下标为5的元素,但是由于数组的下标从0开始,所以实际上访问了数组越界的内存。输出的结果是不确定的,可能会导致程序崩溃。
```c++
cout << arr[0] << endl;
```
这行代码会输出数组中下标为0的元素,即数组的第一个元素11。
```c++
cout << arr[0] + 1 << endl;
```
这行代码会输出数组中下标为0的元素加1的结果,即12。
```c++
cout << arr + 1 << endl;
```
这行代码会输出数组中第二个元素的地址,因为数组名arr本身就代表了数组的首地址,在这里加1表示偏移了一个int类型的内存单位,指向了数组中的第二个元素的地址。
```c++
cout << *(arr + 1) << endl;
```
这行代码会输出数组中第二个元素的值,因为 *(arr + 1) 实际上等价于 arr[1],即使用指针访问数组中的第二个元素的值。
```c++
cout << *arr + 1 << endl;
```
这行代码会输出数组中第一个元素的值加1的结果,即12。因为 *arr 表示数组的第一个元素,而不是指向整个数组的指针,所以将其加1后结果为12。
```c++
cout << &arr[0] + 1 << endl;
```
这行代码会输出数组中第二个元素的地址,因为 &arr[0] 表示数组的首地址,即数组中第一个元素的地址,将其加1表示偏移了一个int类型的内存单位,指向了数组中的第二个元素的地址。
阅读全文