c语言union 数组字节,union联合体数组指针,如何和数组一样用

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

//

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值