作业帮 > 综合 > 作业

C语言里指针问题,程序如下:#define DATA *((Uint16 *)0x100000) *(&DATA+1)

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 00:29:23
C语言里指针问题,程序如下:#define DATA *((Uint16 *)0x100000) *(&DATA+1) = DATA_B;
#define DATA *((Uint16 *)0x100000)
*(&DATA+1) = DATA_B;
首先 *((Uint16 *)0x100000) 意思 就是 从 地址 0x100000 处 读取 一个 Uint16 类型的 变量,先把 这个变量 记做 x
#define DATA *((Uint16 *)0x100000) // 以后 遇到 DATA 就用 *((Uint16 *)0x100000) 取代
*(&DATA+1) = DATA_B; //等效于 *(&*((Uint16 *)0x100000)+1) = DATA_B;
含义 是 取x的地址,再+1,再 取指针,这个 变量 记做 y
由于 x 是 Uint16 类型,占 2个字节,所以 指针 +1 就是 地址+2,于是 &y=0x100002,
那么 *(&DATA+1) = DATA_B; 执行的 结果 就是 地址 0x100002 处 的 数据 = DATA_B
再问: Uint16是usigned int。 我最大的疑问就是怎么理解“*((Uint16 *)0x100000) =从地址0x100000 处读取一个 Uint16 类型的变量”? 一个地址的指针的指针是什么意思呢?
再答: 楼主 说 Uint16是usigned int 那么 你 写的 是 单片机程序了。。。因为在 计算机里 Uint16是usigned short 先看 以下2个的区别 ((Uint16 *)0x100000) 和((Uint16 )0x100000) 前者 比 后者 就多一个 * * 是 指针的 意思 前者 是 有一个 指针,这个指针 指向一个 Uint16 类型的 数; 后者 就是一个数 把0x100000 强制转换为 Uint16 ,结果 是 0x0000