c语言为什么报错expression must have pointer-to-object type(代码很短)

代码还没有写完,写到贴上来的最后两行哪里j划了小红线,为什么报错呢?谢谢
#include<stdio.h>
int main()
{
int m,n,i,a,b,c,a[900],j;
while(scanf("%d%d",&m,&n)!=EOF){
j=0;
for(i=m;i<=n;i++){
a=i/100;
b=(i/10)%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i){
a[j]=i;
j++;
}
}
}
}

因为子文件中引用主程序定义的结构体出错。

解决:

将子程序文件中  子函数移至主文件。

结构体也是一种数据类型,只不过在这种数据类型中又包含了几个基本的数据类型。

构体变量在内存中的存放和基本数据类型变量在内存中的存放是不同的,基本数据类型的存放系统是会给分配一块连续的空间用来存放,而结构体变量确是不一定的。

扩展资料

结构体定义的几种形式:

1、最常用定义方式:定义结构体data,此时结构体相当于一个类型,比如int,如需使用此结构体,方法同int。

struct data

{

char aa;

char bb;

char cc;

};

struct data sum1, sum2;

2、定义结构体data同时,定义需要使用的结构体变量sum1,sum2。如后面再需要定义结构体变量,方法同1。

struct data

{

char aa;

char bb;

char cc;

int dd;

}sum1, sum2;

struct data sum3;

3、定义结构体时,结构体名称缺省,同时定义结构体变量sum1,sum2。但后面不可再定义结构体变量。

struct

{

char aa;

char bb;

char cc;

int dd;

}sum1, sum2;

struct sum3;  <-  编译器报错

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-25
expression must have pointer-to-object type是编译器给出的错误信息,意思是表达式需要含有指向对象的类型。

出现这种错误的一般原因是 出现了与指针重名的申明。如 int a, a[10]。a变量 既是int 类型,又是数组的指针。所以会出错。

如果出现此类错误,首先需要检查是否出现了申明重名,一般来讲,现在的编译器,已经能够比较准确的定位出错误所在位置,所以,修改此类错误也不是非常困难。
第2个回答  2014-07-02

重复了,你有一个a的变量,又有一个a的数组

#include<stdio.h>
int main()
{
int m, n, i, a, b, c, a[900], j;
//           ^        ^   
while (scanf("%d%d", &m, &n) != EOF){
j = 0;
for (i = m; i <= n; i++){
a = i / 100;
b = (i / 10) % 10;
c = i % 10;
if (a*a*a + b*b*b + c*c*c == i){
a[j] = i;
j++;
}
}
}
}

第3个回答  2014-07-02
int m,n,i,a,b,c,a[900],j

两个变量a重复了。换个名字。本回答被提问者采纳
第4个回答  2015-05-18
你的变量出现重定义,即int型变量a, 和int 型数组变量a, 可以改为arr[900]
相似回答