数据结构的定义
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;
}