这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 请教一个指针问题

共2条 1/1 1 跳转至

请教一个指针问题

院士
2006-09-17 18:14:16     打赏
请教一个指针问题



关键词: 请教     一个     指针     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 请高手指教一下代码
extern void load_image(void) /*firmware loading*/
}
vuns_16 read_data1 = 0;
vuns_16 read_data2 = 0;
volatile unsigned long  *r_data;

int boot_size =FIRMWARE_SIZE;
int k;
if (( (unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR)== NULL) {
  printf ("## FIRMWARE ERROR ##\n");
  return ;
}
.....
}
各位高人,上面代码是一个从FLASH ROM地址FIRMWARE_ADDR取固件的程序,想问一下if 语句中用的第一个unsigned long 做什么的?谢谢!
if (( (unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR)== NULL) 1: hehe...if 语句中用的第一个unsigned long 是作为强制类型转换用的:
r_data是指向unsigned long类型数据的指针,但是此指针有可能是16位的,也有可能是32位的,视内存的大小而定,所以要用到unsigned long类型强制转换以保证类型一致性。
2: 又是一个请教指针的问题r_data是一个指针,而FIRMWARE_ADDR的类型楼主没说,按规范一个全大写的标识符应该是一个整数常数,这两种类型不能直接赋值,要进行类型转换。

DSP007所说,第一个unsigned long 是作为强制类型转换用的,其实这句好的写法是:
  if ( (r_data = (unsigned long*)FIRMWARE_ADDR) == NULL)

这样写,语句较短,意义也很清楚:将FIRMWARE_ADDR转型后赋值给r_data,然后再判断它是不是为空(NULL)。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]