#include<stdio.h> int main (){ int array[4][5]={0}; int i,j,k; for(i=0;i<4;i++) { for(j=0;j<5;j++) { array[i][j]=k++; } } printf("array+1:%p\n",array+1); printf("*(array+1):%p\n",*(array+1)); printf("array[1]:%p\n",array[1]); printf("&array[1][0]:%p\n",&array[1][0]); printf("**(array+1):%d\n",**(array+1)); return 0; }请输出结果 并解释每行代码的意思
时间: 2024-04-16 11:28:58 浏览: 60
数组和指针
这段代码的输出结果是:
```
array+1: 0x7ffd7e2c4a90
*(array+1): 0x7ffd7e2c4a90
array[1]: 0x7ffd7e2c4a90
&array[1][0]: 0x7ffd7e2c4a90
**(array+1): 5
```
解释每行代码的意思:
```c
int array[4][5] = {0}; // 声明一个4行5列的二维数组,并初始化为0
int i, j, k;
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
array[i][j] = k++; // 对数组元素赋值,k的值不断递增
}
}
printf("array+1: %p\n", array+1); // 打印二维数组的第2行的地址
printf("*(array+1): %p\n", *(array+1)); // 打印二维数组的第2行的地址
printf("array[1]: %p\n", array[1]); // 打印二维数组的第2行的地址
printf("&array[1][0]: %p\n", &array[1][0]); // 打印二维数组的第2行第1列元素的地址
printf("**(array+1): %d\n", **(array+1)); // 打印二维数组的第2行第1列元素的值
```
解释结果:
- `array+1`:`array` 是一个指向二维数组首行的指针,`array+1` 表示指向二维数组的第2行,打印出该行的地址。
- `*(array+1)`:`*(array+1)` 等价于 `array[1]`,表示指向二维数组的第2行,打印出该行的地址。
- `array[1]`:表示二维数组的第2行的地址。
- `&array[1][0]`:表示二维数组的第2行第1列元素的地址。
- `**(array+1)`:`*(array+1)` 等价于 `array[1]`,然后再解引用一次,表示二维数组的第2行第1列元素的值。
最后一个输出语句打印出的值是5,因为 `**(array+1)` 等价于 `*(*(array+1))`,即解引用二维数组第2行的第1个元素。在本例中,该元素的值为5。
阅读全文