我正在关注联盟
union data {
uint64_t val;
struct{
....
}
};
我有一个功能
func(union data mydata[])
{
printf("%llu",(uint64_t)mydata[0]); // Here is the error
}
当我编译此代码时,它会给出以下错误
error: aggregate value used where an integer was expected
答案 0 :(得分:10)
您无法访问索引联合数组的字段:mydata[0]
是union data
类型的值,无法转换为uint64_t
。
您需要访问正确的工会成员:
printf("%" PRIu64, mydata[0].val);
选择uint64_t
值。不需要演员。
另外:使用PRIu64
可移植地打印64位值,您不能认为%llu
是正确的格式说明符。
答案 1 :(得分:4)
访问n
指向mydata
<的int64_t
th 元素的第一个成员的“脏”解决方案strong> 没有 知道它的名字是:
#include <inttypes.h>
#include <stdio.h>
union data
{
uint64_t val;
...
};
func(union data mydata[])
{
size_t n = 3;
printf("%"PRIu64, *((uint64_t *)(mydata + n));
}
这可以作为第一个成员的联合或结构的地址,保证与联合或结构本身的地址相同。