union联合体数组指针,怎么和数组一样用?
union
{
unsigned _int64 uni;
unsigned char pos[8];
}gene[3];
void function(union *pp)
{*(pp+1) = 0x0706050403020100;} //错误1
void main()
{function(gene);} //错误2
我想实现:
把gene当成一个全局变量数组看待,用function函数来改变这个数组里的某个值。如果它真是数组,是很好实现的。
但是现在不得不把它绑定成一个union,以便在其他时候分成8段来使用这个64位的值(就是有时候我要一起用,有时候又要分开用)。怎么才能实现这个功能呢?
有2个错误:
error C2582: '$S9' : 'operator =' function is unavailable
error C2664: 'function' : cannot convert parameter 1 from 'union [3]' to 'union $S9 *'
第二个错误说gene不是一个指针?那union的指针是什么?
------解决方案--------------------
建议直接用int array[8];这样就简化了分段。
把超过32位的数值用两个或多个数组中的int来表示;
------解决方案--------------------
觉得你应该先声明一个union比如tGene,然后声明数组 tGene gene[3], 函数说明用 function(tGene *p), 赋值用
p[1].uni=0x0706050403020100;
------解决方案--------------------
union 根struct enum等关键字是一样的,
你能使用struct *p 这样定义一个变量吗, 显然是不正确的.
typedef union
{
unsigned _int64 uni;
unsigned char pos[8];
} MyInt64;
MyInt64 gene[3];
void function(MyInt64*pp)
{*(pp+1) = 0x0706050403020100;}
void main()
{function(gene);}
------解决方案--------------------
0x0706050403020100
和
0x0706050403020100i64
和
0x0706050403020100ui64
不是一回事!
------解决方案--------------------
#include
union U {
unsigned _int64 uni;
unsigned char pos[8];
} gene[3];
void function(U *pp) {
pp[1].uni = 0x0706050403020100ui64;
}
void main() {
function(gene);
printf("0x%I64xui64\n",gene[1].uni);
printf("%02x %02x %02x %02x %02x %02x %02x %02x\n",
gene[1].pos[0],
gene[1].pos[1],
gene[1].pos[2],
gene[1].pos[3],
gene[1].pos[4],
gene[1].pos[5],
gene[1].pos[6],
gene[1].pos[7]);
}
//0x706050403020100ui64
//00 01 02 03 04 05 06 07
//