我的编译器出现如下错误:
C51 COMPILER V9.01 - SN: C1ADC-HAI60D COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009 * WARNING C260 IN LINE 300 OF SEQUENCE.C: '=': pointer truncation * ERROR C190 IN LINE 301 OF SEQUENCE.C: '&': not an lvalue
以下是我的代码:
struct myCond{
unsigned char currStatus;
unsigned char prevStatus;
unsigned int *timer;
unsigned char *flag;
}
struct myCond StatCond;
unsigned int data timerdata;
bit bdata timeflag;
void someSubroutine (void)
{
struct myCond *tempCond;
tempCond = &StatCond;
tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);
}
最佳答案
我们应该猜哪一行是 301 吗?
据我了解,问题在于:
tempCond->timer = &((unsigned int)timerdata);
tempCond->flag = &((unsigned char)timeflag);
(unsigned int)timerdata
和 (unsigned char)timeflag
是值,准确地说是 r-values
。与 l-values
不同,它们不能被修改或分配,而 timerdata
和 timeflag
是。因此,您不能使用 &
获取 r-values
的地址。这与编写 &1
是一样的。 1
本身不作为对象存在于数据存储器中。
你应该这样写:
tempCond->timer = &timerdata;
tempCond->flag = (unsigned char*)&timeflag;
而且我不太确定获取位变量的地址是否合法。最后一行可能编译失败。
也许重新定义结构会有所帮助:
struct myCond{
...
bit bdata *flag; // or maybe without bdata
}
然后您将编写 tempCond->flag = &timeflag;
。
关于c - 指向结构的指针成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424417/