鱼C论坛

 找回密码
 立即注册
查看: 3135|回复: 1

[已解决]数组指针课后习题答案问题

[复制链接]
发表于 2021-4-22 10:53:53 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>

int main()
{
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int *p = (int *)(&array + 1);

        printf("%d\n", *(p - 6));

        return 0;
}
`[Y+h%EwgS!1,82NJ
解析:首先你要明白虽然 array 和 &array 的值相同,但含义是不一样的。array 表示数组第一个元素的位置,而 &array 表示的是整个数组的位置(这里将数组看做一个整体)。Iw*<PQhUZ^
!`Z{zC3QUdVnYs7>]2}5-Mltk;w
因此,&array + 1 指向的就是整个数组最后的位置(第二个 array 数组的起始位置),然后 (int *) 将其强制转换为一个整型地址(指针),所以指针变量 p 初始化后,指向的地址应该是 array[10](第 11 个元素),所以 *(p - 6) == array[10 - 6] == array[4] == 4。pM V@o
`Zcl]*F <?Cw7Xgt^&$[E{DQ
重点强调:array 是数组第一个元素的地址,所以 array + 1 指向数组第二个元素;&array 是整个数组的地址,所以 &array + 1 指向整个数组最后的位置。
#include <stdio.h>

int main()
{
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int (*p)[10] = &array;

        printf("%d\n", *(*(p+1)-6));

        return 0;
}
基本上一道题成功理解的话,这道题就不会有什么问题。指针 p 指向数组 array 的地址,p + 1 便是指向整个数组最后的位置(第二个 array 数组的起始位置),于是 *(p+1) 即下一个数组 array 数组的起始位置,即 &array[11],所以 *(*(p+1)-6) == array[11 - 6] = array[5]。但是我觉得后面这个题  跟上面是一样的也应该是array[10 - 6] == array[4] == 4,虽然这里是array[5],但答案依旧是4,不是很明白两个的区别  一个人是
array[4] == 4  一个是array[5]==4

最佳答案
2021-4-22 10:53:54
本帖最后由 1055741510 于 2021-4-24 17:25 编辑

*(*(p+1)-6) 等价于 *(p[1] - 6) int (*p)[10] = &array定义了数组指针 即十个指针变量 其中指针p[0]指向array的首地址 p[1]指向array数组的下一个地址 即array[11](可以这么认为), p[1]-6就是让指针从array[11]向前移动6个int大小 你自己数一数指向的是4 也就是array[4]

最佳答案

查看完整内容

*(*(p+1)-6) 等价于 *(p[1] - 6) int (*p)[10] = &array定义了数组指针 即十个指针变量 其中指针p[0]指向array的首地址 p[1]指向array数组的下一个地址 即array[11](可以这么认为), p[1]-6就是让指针从array[11]向前移动6个int大小 你自己数一数指向的是4 也就是array[4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-22 10:53:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 1055741510 于 2021-4-24 17:25 编辑

*(*(p+1)-6) 等价于 *(p[1] - 6) int (*p)[10] = &array定义了数组指针 即十个指针变量 其中指针p[0]指向array的首地址 p[1]指向array数组的下一个地址 即array[11](可以这么认为), p[1]-6就是让指针从array[11]向前移动6个int大小 你自己数一数指向的是4 也就是array[4]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表