求问这个程序是怎么回事?
编译之后出现一个错误#include <stdio.h>
int main( )
{
int a={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++ 是因为版本太低的缘故么?
求各位大神解答一下! 感谢~~
int *p 改为int **p
二维数组是数组的数组,a是地址的地址 #include <stdio.h>
int main( )
{
int a={1,3,5,7,9,11,13,15,17,19,21,23}; // a为指向int的 ,&a为指向3个 int的
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) ; //即为指向int的,跨度为16个byte,取值后地址不变(这是编译器的运作方式,在实质上没有差别) ,只是从指向int变到指向int,跨度变为4byte,再取值后就是int类型。 printf("%d ",*(*(p+i)+j));这句话有问题,*(p+i)+j是一个常量(就是一个数)就不能再对它用星号取值了 alltolove 发表于 2016-11-5 12:43
printf("%d ",*(*(p+i)+j));这句话有问题,*(p+i)+j是一个常量(就是一个数)就不能再对它用星号取值了
呃。。。可是p是指向一个二维数组,*(p+i)+j是等于p+j还是一个地址,再加上*才是值。。。然后我刚刚改了下,试着把定义*p改成了(*p)就能运行出来了,虽然不知道为什么。。。 阿撩 发表于 2016-11-5 19:54
呃。。。可是p是指向一个二维数组,*(p+i)+j是等于p+j还是一个地址,再加上*才是值。。。然后我刚刚改了 ...
*(p+i)+j是等于p+j还是一个地址 第一个错误是 p=a;
什么破编译器只是给了warnning,但你没注意看吧?
这个错误没解决,继续往下想肯定想不明白
这里的正确代码见fc1735 贴的 fc1735 发表于 2016-11-5 01:28
#include
int main( )
{
谢谢谢谢~ 虽然不是特别懂 感觉自己还是有点懵 但是还是有认真看了初学者见谅 感谢~ 建议先别学这么细致的东西,以后再慢慢补充
页:
[1]