搜索
bottom↓
回复: 24

用typedef struct定义的结构体怎么使用?

[复制链接]

出0入0汤圆

发表于 2011-6-28 13:54:16 | 显示全部楼层 |阅读模式
typedef struct os_stk_data
{
INT32U  OSFree;                     
INT32U  OSUsed;               
} OS_STK_DATA;
这算是定义完了吗?我直接用会报错。那么想使用这个结构体中的元素的话,应该怎么办?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-6-28 13:59:18 | 显示全部楼层
OS_STK_DATA   data1;

data1.OSFree = 0;

出0入0汤圆

发表于 2011-6-28 14:06:15 | 显示全部楼层
typedef就是给struct os_stk_data定义了一个别名,当然不能直接用了。

出0入0汤圆

发表于 2011-6-28 14:08:13 | 显示全部楼层
typedef struct os_stk_data  
{
INT32U  OSFree;                     
INT32U  OSUsed;                 
} OS_STK_DATA;


定义了一个 os_stk_data   形式的结构体  并把这个结构体类型  定义为  OS_STK_DATA  类型

出0入0汤圆

 楼主| 发表于 2011-6-28 14:11:12 | 显示全部楼层
在这个函数中:NT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data),
直接使用你说的办法定义的话会报错的。是不是定义成:
OS_STK_DATA   *data1;

出0入0汤圆

 楼主| 发表于 2011-6-28 14:14:15 | 显示全部楼层
这样引用结构体元素?
if((*data1).OSUsed)
{
   number = (*data1).OSFree;
}
这么写倒是不报错,程序跑飞了!

出0入0汤圆

发表于 2011-6-28 14:24:00 | 显示全部楼层
if(p_stk_data->OSUsed){

}

出0入0汤圆

 楼主| 发表于 2011-6-28 14:31:29 | 显示全部楼层
谢谢各位!
搞定了。跑飞是因为其它地方写错了。
这样引用结构体元素没问题!
if((*data1).OSUsed)
{
   number = (*data1).OSFree;  
}

出0入0汤圆

 楼主| 发表于 2011-6-28 14:54:44 | 显示全部楼层
又有新问题!
INT8U  OSTaskStkChk (INT8U prio, OS_STK_DATA *p_stk_data)
{
......
    if (p_stk_data == (OS_STK_DATA *)0)
{              /* Validate 'p_stk_data'                        */
        return (OS_ERR_PDATA_NULL);
}

......
}
if (p_stk_data == (OS_STK_DATA *)0) 这句话是什么意思?

出0入0汤圆

发表于 2011-6-28 15:07:22 | 显示全部楼层
回复【8楼】o11o MAN UP
又有新问题!
int8u  ostaskstkchk (int8u prio, os_stk_data *p_stk_data)
{
......
    if (p_stk_data == (os_stk_data *)0)  
{              /* validate 'p_stk_data'                        */
        return (os_err_pdata_null);
}
......
}
if (p_stk_data == (os_stk_data *)0) 这句话是什么意思?  

-----------------------------------------------------------------------

判断指针是否为空,容错用的。

出0入0汤圆

 楼主| 发表于 2011-6-28 15:15:41 | 显示全部楼层
那么,什么叫做指针为空呢?我定义了呀!

出0入0汤圆

 楼主| 发表于 2011-6-28 15:29:34 | 显示全部楼层
搜到答案了。谢谢!

出0入0汤圆

 楼主| 发表于 2011-6-28 15:45:05 | 显示全部楼层
typedef struct os_stk_data   
{  
INT32U  OSFree;                       
INT32U  OSUsed;                  
} OS_STK_DATA;  

OS_STK_DATA   *data1;

这么定义难道不对吗?为什么指针指向是空的呢?
这样引用:
ostaskstkchk (5, data1)

出0入0汤圆

 楼主| 发表于 2011-6-28 16:15:38 | 显示全部楼层
顶!

出0入0汤圆

发表于 2011-6-28 16:20:21 | 显示全部楼层
回复【12楼】o11o MAN UP
-----------------------------------------------------------------------

回复【13楼】o11o MAN UP
-----------------------------------------------------------------------

指针赋值之后,指针指向才不是空的。指针没有定义的话,那指针本身就是空的。看书!

出0入0汤圆

 楼主| 发表于 2011-6-28 16:41:23 | 显示全部楼层
可是我定义了这个指针了呀。
OS_STK_DATA   *data1;不就是定义了一个结构体指针了吗?data1不是指向结构体*datda1吗?

出0入42汤圆

发表于 2011-6-28 16:43:58 | 显示全部楼层
写代码都不用读书的吗?这可是最基本的语法啊!

出0入0汤圆

 楼主| 发表于 2011-6-28 16:51:23 | 显示全部楼层
回复【16楼】albert_w
写代码都不用读书的吗?这可是最基本的语法啊!
-----------------------------------------------------------------------

你指的是结构体部分还是指针部分?

出0入0汤圆

发表于 2011-6-28 17:18:05 | 显示全部楼层
指针回复【17楼】o11o  MAN UP
回复【16楼】albert_w
写代码都不用读书的吗?这可是最基本的语法啊!
-----------------------------------------------------------------------
你指的是结构体部分还是指针部分?
-----------------------------------------------------------------------

指针部分

你定义一个局部的int不赋值里面是什么,随机的东西
你定义一个指针不赋值,为了防止野指针,都是默认是空指针

出0入0汤圆

发表于 2011-6-28 17:24:35 | 显示全部楼层
说的 详细,这个的好好看看了

出0入0汤圆

发表于 2011-6-28 20:14:26 | 显示全部楼层
回复【7楼】o11o MAN UP
谢谢各位!
搞定了。跑飞是因为其它地方写错了。
这样引用结构体元素没问题!  
if((*data1).osused)  
{  
   number = (*data1).osfree;   
}  

-----------------------------------------------------------------------
=====================================================================

不用这么麻烦强制转换来转换去,这样写:

if(data1->osused)  
{  
   number = data1->osfree;   
}

出0入0汤圆

发表于 2014-4-21 11:20:41 | 显示全部楼层
【教程】C/C++:[3]如何使用struct结构体 http://jingyan.baidu.com/article/6dad5075cf0662a123e36ef9.html

出0入0汤圆

发表于 2014-4-21 11:27:40 | 显示全部楼层
【学习教程】C/C++:[3]如何使用struct结构体 http://jingyan.baidu.com/article/6dad5075cf0662a123e36ef9.html

出0入0汤圆

发表于 2014-4-21 13:01:36 | 显示全部楼层
typedef 是取别名 其他的就和结构体定义一样使用了

出0入0汤圆

发表于 2014-4-21 13:45:28 | 显示全部楼层
OS_STK_DATA   *data1;
只是定义了指针,但内存还未分配,
要么在使用malloc在堆空间分配内存,
要么OS_STK_DATA   data1;编译时,会在栈空间分配内存
这是我的理解,不一定对,还在深入研究中
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 10:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表