鱼C论坛

 找回密码
 立即注册
查看: 3380|回复: 8

求问这个程序是怎么回事?

[复制链接]
发表于 2016-11-4 21:33:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编译之后出现一个错误
#include <stdio.h>
int main( )
{

        int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
        int *p,i,j;
        p=a;
        for(i=0;i<3;i++)
        {
        for(j=0;j<4;j++)
        {
        printf("%d ",*(*(p+i)+j));
        }
        }
}

错误提示:F:\VC\MyProjects\e812\e812.c(12) : error C2100: illegal indirection

说是printf那一步不合法  用得是VC6++ 是因为版本太低的缘故么?

求各位大神解答一下! 感谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-4 23:35:15 | 显示全部楼层
int *p 改为int **p
二维数组是数组的数组,a是地址的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-5 01:28:24 | 显示全部楼层
#include <stdio.h>
int main( )
{

        int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; // a为指向int[4]的 ,&a为指向3个 int[4]的
        int *p,i,j;  // p为指向int的
        p=a;
        for(i=0;i<3;i++)
        {
        for(j=0;j<4;j++)
        {
        printf("%d ",*(*(p+i)+j));   //p的跨度是4个byte,而由于编译器认定其为指向int的,取值后不为地址,无法再取值。
        }
        }
}

修正为: int (*p) [4] ; //即为指向int[4]的,跨度为16个byte,取值后地址不变(这是编译器的运作方式,在实质上没有差别) ,只是从指向int[4]变到指向int,跨度变为4byte,再取值后就是int类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-5 12:43:30 | 显示全部楼层
printf("%d ",*(*(p+i)+j));这句话有问题,*(p+i)+j是一个常量(就是一个数)就不能再对它用星号取值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-5 19:54:33 | 显示全部楼层
alltolove 发表于 2016-11-5 12:43
printf("%d ",*(*(p+i)+j));这句话有问题,*(p+i)+j是一个常量(就是一个数)就不能再对它用星号取值了

呃。。。可是p是指向一个二维数组,*(p+i)+j是等于p[i]+j还是一个地址,再加上*才是值。。。然后我刚刚改了下,试着把定义*p改成了(*p)[4]就能运行出来了,虽然不知道为什么。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-5 19:55:21 | 显示全部楼层
阿撩 发表于 2016-11-5 19:54
呃。。。可是p是指向一个二维数组,*(p+i)+j是等于p+j还是一个地址,再加上*才是值。。。然后我刚刚改了 ...

*(p+i)+j是等于p[i]+j还是一个地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-5 20:52:10 | 显示全部楼层
第一个错误是 p=a;
什么破编译器只是给了warnning,但你没注意看吧?
这个错误没解决,继续往下想肯定想不明白

这里的正确代码见fc1735 贴的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-25 19:26:55 | 显示全部楼层
fc1735 发表于 2016-11-5 01:28
#include
int main( )
{

谢谢谢谢~ 虽然不是特别懂 感觉自己还是有点懵 但是还是有认真看了  初学者见谅 感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-26 16:28:19 | 显示全部楼层
建议先别学这么细致的东西,以后再慢慢补充
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 18:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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