结构体总结

数据结构的定义
eg:
typedef sip_header
{
char *hname;
char *hvalue;
}ST_SIP_HEADER, *PST_SIP_HEADER; (注意分号)

定义sip_header的结构体变量
如下:
1,定义结构体变量
?ST_SIP_HEADER stExample;
2,定义结构体指针
ST_SIP_HEADER *pstExample;
or
PST_SIP_HEADER pstExample;
两者的区别在于有没有有没有结构体空间

还可以如下定义结构体
typedef sip_header sip_header_t; (注意有分号)
struct sip_header
{
char *hname;
char *hvalue;
};(注意分号)

结构体的初始话
typedef struct sip_header
{
char *hname;
char *hvalue;
}example1{"name1","10"};
struct sip_header
{
char *hname;
char *hvalue;
}example{"name1","10"};
上面的定义是错误的,因为typedef是一个自定义类型!所以typedef之后就成了类型了,而不是变量。example已经成为了一个类型了相当与int,而不是一个变量.
下面的定义是正确的,因为sip_header是一个结构体,example变成了结构体的实例。
结构体的初始化方法:
1,如上面定义结构体的实例。(在大型的型目中一般不用)。
2,可以为结构体的每个值复值初始话
3,如果结构体内没有其他复杂的结构 (如结构体等)可用memset()函数进行赋值。
ST_SIP_HEADER stTestStruct 可用memset (&stTestStruct, 0, sizeof(ST_SIP_HEADER))
PST_SIP_HEADER pstTestStruct 或ST_SIP_HEADER *pstTestStruct 或 sip_header_t *pstTestStruct 可用memset (pstTestStruct, 0, sizeof(ST_SIP_HEADER))进行初始话;
4,如果结构体内有复杂的结构,则给每个内部的结构体编写初始化函数进行初始话。
eg:
#define OSIP_SUCCESS 0
#define OSIP_BADPARAMETER -2;
typedef struct osip_uri osip_uri_t;
struct osip_uri
{
char *scheme;
char *username;
char *password;
char *host;
char *port;
osip_list_t url_params;
osip_list_t url_headers;
char *string;
};

typedef osip_list osip_list_t;
struct osip_list
{
int nb_elt;
_node_t *node;
};

int osip_uri_init (osip_uri_t **url)
{
*url = (osip_uri_t *)osip_malloc (sizeof (osip_uri_t));
if (url ==NULL)
ruturn OSIP_NOMEM;
(*url)->scheme = NULL;
(*url)->username = NULL;
(*url)->password = NULL'
(*url)->host = NULL;
osip_list_init (& (*url)->url_params);
osip_list_init (& (*url)->url_headers);
(*url)->string = NULL;
return OSIP_SUCCESS;
}

int osip_list_init (osip_list_t *li)
{
if (li == NULL)
return OSIP_BADPARAMETER;
memset (li, 0, sizeof (osip_list_t));
return OSIP_SUCCESS;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值