#include <stdio.h> int main() { int aa[2][5] = {1,2,3,4,5,6,7,8,9,10}; int *ptr1 = (int*)(&aa+1); int *ptr2 = (int*)(*(aa+1)); printf("%d,%d",*(ptr1-1),*(ptr2-1)); return 0; }计算结果以及为什么是这样的计算结果以及他的计算过程
时间: 2023-08-28 15:02:55 浏览: 355
#include <stdio.h>
4星 · 用户满意度95%
这段代码的计算结果是:5, 10。
首先,数组 `aa` 是一个二维数组,其中包含两行五列的元素。初始化的值为:1, 2, 3, 4, 5, 6, 7, 8, 9, 10。
接下来,定义了两个指针 `ptr1` 和 `ptr2`。ptr1` 的初始化值为 `&aa + 1`,它的类型是指向整型的指针。`&aa` 是二维数组 `aa` 的地址,加上 `1` 后,指向了 `aa` 数组后面的位置。由于 `aa` 是一个二维数组,所以 `&aa + 1` 的类型是指向数组的指针,需要进行强制类型转换成 `int*`。
同样地,`ptr2` 的初始化值为 `*(aa + 1)`,也就是 `aa` 数组的第二行的首地址。因为 `aa` 是一个二维数组,所以 `aa + 1` 表达式会得到第二行的地址。
最后,通过解引用操作符 `*` 取出指针所指向的值,并通过 `-1` 得到该地址前一个元素的值。
所以,`*(ptr1-1)` 表达式得到的值是第一行最后一个元素的值,即 `5`;而 `*(ptr2-1)` 表达式得到的值是第二行最后一个元素的值,即 `10`。
阅读全文