&符号不能被用于左值, 全局变量的地址是唯一的, 不可以修改的一个左值

#file1.h

#define CCPM2M_MAX_DEVICE 5  /* MAX number of Direct M2M support */

typedef struct {
     ULONG min1; /* contains hmin1 and lmin1 */
     USHORT min2;
} AUTOREG_MIN_DATA;

typedef struct {
     UCHAR imsi_length; /* MIN is stored:  imsi_length=0 IMSI is stored: imsi_length != 0 */
     union {
         UCHAR     imsi[IF_IMSI_LEN];
         AUTOREG_MIN_DATA    min;
     } mob_id;  
} CCPUM2MAUTOREG;

/* 想要在file.cc以外的.cc文件使用数组M2M_DCA_DVICE, 需要做外部声明, 声明数组可以用指针方式或者数组方式, 除非需要用sizeof()一般不用加数组长度*/
extern CCPUM2MAUTOREG  M2M_DCA_DVICE[]; 

/* 使用宏定义数组方便使用, 使用指针(&M2M_DCA_DVICE[idx])可以方便函数传递修改数组中的值.
#define CCPM2M_DCA_DVICE(idx)  (&M2M_DCA_DVICE[idx])
#define CCPM2M_DCA_IDX()   CCPm2m_dca_idx

 

#file.cc

CCPUM2MAUTOREG M2M_DCA_DVICE[CCPM2M_MAX_DEVICE];

/*error:&符号不能被用于左值*/
CCPu_srchm2mcaptab(&CCPUR_IMSI_DIGITS(crcr_ptr, 0), CCPUR_IMSI_LENGTH(crcr_ptr),
                                           ((CCPUR_HMIN1(crcr_ptr) << 16) | CCPUR_LMIN1(crcr_ptr)),
                                           CCPUR_MIN2(crcr_ptr), &CCPM2M_DCA_DVICE(0), CCPM2M_SO33_TYPE);

/*由于M2M_DCA_DVICE[CCPM2M_MAX_DEVICE]是一个定义的全局变量, 全局变量的地址是唯一的, 不可以修改的, 所以他不是一个左值, 我们能用&去取他的地址的指针*/

#define CCPUR_IMSI_DIGITS(crcr_ptr, byte)       (crcr_ptr)->cp_imsi_digits[byte]

SHORT CCPs_sndrctcasn()
{

     CRCR_PTR crcr_ptr;

     CCPUM2MAUTOREG * m2m_ptr = CCPM2M_DCA_DVICE(0);     /* 我们用一个可以修改的左值作为代替就可以了 */

     CCPu_srchm2mcaptab(&CCPUR_IMSI_DIGITS(crcr_ptr, 0), CCPUR_IMSI_LENGTH(crcr_ptr),      /*CCPUR_IMSI_DIGITS(crcr_ptr, 0)定义的形参就可以直接取地址 */  
                                           ((CCPUR_HMIN1(crcr_ptr) << 16) | CCPUR_LMIN1(crcr_ptr)),
                                           CCPUR_MIN2(crcr_ptr), &m2m_ptr, CCPM2M_SO33_TYPE);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值