&符号不能被用于左值, 全局变量的地址是唯一的, 不可以修改的一个左值
2013-10-25 15:07
441 查看
#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);
}
#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);
}
相关文章推荐
- 偶试一下kvo
- NSPredicate 应用 --数组如何一键去重,如何一行代码筛选,请慢慢看来
- phpstorm xdebug 配置
- 如何在 Windows上编译Objective-C
- POJ 1734 Sightseeing trip Floyd求最小环
- 最大公约数: 最小公倍数
- 2013回忆录,从大学到工作
- MTK 报错集锦
- 执行存储过程报错:“SQLSERVER 内部错误。文本管理器无法继续执行当前语句”的处理方法
- iOS培训篇UIView层次——code介绍
- C语言混合运算、强制转换盒运算符
- 【转】Bluedroid的结构和代码分布
- 二叉树遍历
- Documentation/filesystems/befs.txt
- 字典树(Trie tree)
- bss段、data段和text段
- Broadcast(广播)和BroadcastReceiver(广播接收器)
- servletContext
- GMGridView上下拖动时禁掉左右移动
- 充分利用显示游标属性