c - 指向结构的指针成员

标签 c pointers struct 8051

我的编译器出现如下错误:

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 不同,它们不能被修改或分配,而 timerdatatimeflag 是。因此,您不能使用 & 获取 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/

相关文章:

c - 为什么第二线程中的暂停(2)不返回?

编译AVX2程序

c - 带参数的宏

c++ - C++命名空间名和类名重复会导致冲突吗?

swift - Swift 中的结构数组

c++ - 是否可以从 C++ 中此类中定义的结构内部调用类方法?

c - 传递 'new_student' 的参数 1 使指针来自整数而不进行强制转换

c - malloc 上的段错误

c - 如何将 char * const[256] 正确转换为 const char * const*

c - C函数指针问题中的最少帐单程序