鱼C论坛

 找回密码
 立即注册
查看: 4183|回复: 4

[已解决]c语言课后作业求助

[复制链接]
发表于 2021-6-3 20:06:26 | 显示全部楼层 |阅读模式
20鱼币
C语言第二十三课后作业第6题

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 + 1 指向整个数组最后的位置(第二个 array 数组的起始位置),那么 p+1 不就是&array[11]了吗?为什么 *(p+1)才是&array[11] ?
最佳答案
2021-6-3 20:06:27
p是个数组指针 类型是 int *【10】        跨度是 int 【10】, array的跨度是 int  (4byte)
p+1  加指向类型的宽度   + int*10(40 byte)      
p+1( int *【10】) 的值  == array+10 (int*)   但类型不一样     
p+1 指向的是后一个 包含十个整型的数组    array+10指向  第十一个整型
  *(p+1)解引用之后指向整型   == array+10

最佳答案

查看完整内容

p是个数组指针 类型是 int *【10】 跨度是 int 【10】, array的跨度是 int (4byte) p+1 加指向类型的宽度 + int*10(40 byte) p+1( int *【10】) 的值 == array+10 (int*) 但类型不一样 p+1 指向的是后一个 包含十个整型的数组 array+10指向 第十一个整型 *(p+1)解引用之后指向整型 == array+10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-3 20:06:27 | 显示全部楼层    本楼为最佳答案   
p是个数组指针 类型是 int *【10】        跨度是 int 【10】, array的跨度是 int  (4byte)
p+1  加指向类型的宽度   + int*10(40 byte)      
p+1( int *【10】) 的值  == array+10 (int*)   但类型不一样     
p+1 指向的是后一个 包含十个整型的数组    array+10指向  第十一个整型
  *(p+1)解引用之后指向整型   == array+10

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-29 21:32:41 | 显示全部楼层
// C语言第二十三课后作业第6题

#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)); // *(p + 1)指向的是array[1]的地址 (&arrat[1] - 6)相当于array[-5] = array[4] 

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-30 16:27:56 | 显示全部楼层
在二维数组中*(p+1)是取二维数组第二行的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-1 10:01:53 | 显示全部楼层
关于指针我教你个小技巧,c语言的声明其实就告诉你了一切,就说这个int (*p)[10],也就是说任何形如(*(p+i))[j]的格式的值为int,而我们知道在c语言中a[i]==*(a+i),这俩个等价,所以可以看出p是个二级指针,而&array[11]显然是一个一级指针;
这个方法判断方法试用所有类型的指针,比如单纯申明个二级指针,int **p,也就是说**P的类型为int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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