结构体指针赋值问题,麻烦指点

千行百行 2016-08-17 10:58:20
typedef struct
{
int header_ptr;
char buf[DSP_INFO_SIZE];
}BUF;
BUF *dsp_buf_addr=(BUF *)-1;

代码的最后一句看不懂
...全文
196 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-17
  • 打赏
  • 举报
回复
理解正确
kongl123 2016-08-17
  • 打赏
  • 举报
回复
看起来-1是指uninitialized状态,真正使用前会有init是吧 @赵4老师 。 单片机内存没用保护模式,所以不用0作nil,这样吧
千行百行 2016-08-17
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
BUF *dsp_buf_addr=(BUF *)-1;//将-1强制类型转换为BUF *类型后作为BUF*类型变量dsp_buf_addr的初始值。
这样赋值结构体指针dsp_buf_addr指向的是什么内容呢?
千行百行 2016-08-17
  • 打赏
  • 举报
回复
引用 1 楼 kongl123 的回复:
BUF *dsp_buf_addr=(BUF *)-1为什么这么定义和dsp_buf_addr怎么使用有关,你可以看看dsp_buf_addr是怎么用的
(long *)dsp_buf_addr==(long *)-1;
后边又进行了这个判断,看不懂是咋回事
赵4老师 2016-08-17
  • 打赏
  • 举报
回复
BUF *dsp_buf_addr=(BUF *)-1;//将-1强制类型转换为BUF *类型后作为BUF*类型变量dsp_buf_addr的初始值。
kongl123 2016-08-17
  • 打赏
  • 举报
回复
BUF *dsp_buf_addr=(BUF *)-1为什么这么定义和dsp_buf_addr怎么使用有关,你可以看看dsp_buf_addr是怎么用的
iwen 2016-08-17
  • 打赏
  • 举报
回复
BUF *dsp_buf_addr=(BUF *)-1 上面这句话与下面这句话的作用是相同的 BUF *dsp_buf_addr=0xFFFFFFFF; 因为在指针里-1 就是0xFFFFFFFF; 利用地址表示两种状态,也是可能存在的,一种是未初始化的,还有一种是失败的。 假如我们用NULL,也就是0表示失败的话,那么有人就喜欢用0xFFFFFFFF表示未初始化的。
赵4老师 2016-08-17
  • 打赏
  • 举报
回复
引用 3 楼 shiyuzuxiaqianli 的回复:
[quote=引用 1 楼 kongl123 的回复:] BUF *dsp_buf_addr=(BUF *)-1为什么这么定义和dsp_buf_addr怎么使用有关,你可以看看dsp_buf_addr是怎么用的
(long *)dsp_buf_addr==(long *)-1;
后边又进行了这个判断,看不懂是咋回事[/quote] 判断 将dsp_buf_addr强制类型转换为(long *)类型后的值 和 将-1强制类型转换为(long *)类型后的值 是否相等。 理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
wnmantou 2016-08-17
  • 打赏
  • 举报
回复
我个人的理解,最后一句是定义一个指向结构体类型的指针,赋值号右边把-1强制类型转化为结构体指针类型,-1为十进制数,转化为二进制01组合的时候是没有正负的。个人建议,如有不妥,望指正。
lm_whales 2016-08-17
  • 打赏
  • 举报
回复
就是把 -1 当作 nullptr (NULL) 使用的 因为 地址 0 是个经常会用到的的内存地址, 不能把0 当作 NULL,nullptr 使用
千行百行 2016-08-17
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
理解正确
还是不太懂啊,麻烦解释一下吧。没遇到过这样的情况,上网查资料也没找到

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧