C语言中结构体是一个比较灵活的东西,结构体如果应用的好的话可以带来很多很好的效果,而且对结构体的应用程度直接能反映出程序员对C语言的掌握程度。
结构体中的成员可以是各种类型的东西,比如普通变量,指针,数组,甚至是另外一个结构体或者是结构体自身,而结构体本身也可以被声明为各种类型。这就给结构体的应用带来了很大的灵活性,同时也就为各种错误埋下了伏笔。在做毕业设计的时候因为用到了结构体,结果由于对其不太了解一个小小的问题尽然调试了一个下午,真是郁闷啊!现在把问题成列出来以此为鉴!呵呵
在程序中我首先定义了一个结构体:
typedef struct ElecStateStruct
{
char *elec_name;
char *elec_state;
} ElecStateStruce;
关于typedef只是为了使应用这个结构体声明变量的时候更加方便而已。如果不定义这个伪类型的话就必须这样声明结构体变量:
struce ElecStateStruct 变量;
如果定义了typedef的话就变成这样声明了:
ElecStateStruct 变量;呵呵是不是方便很多呢,关于typedef可以用google搜索一下可以得到很多!
结构体中的两个成员我都用来指针,这就是给我带来巨大烦恼的地方,因为在后面我声明了一个结构体指针:
ElecStateStruct *p;
这时候我想给这个结构体的成员赋值的时候总是提示出内存错误!而且如果把一个指针赋给这个结构体变量的成员的话,再后面引用时发现结构体成员所指的地方并不是我想要的,指针发生了混乱!天啊!
经过google一番,后来终于找到了原因所在:
如果声明了一个结构体指针的话,在程序中必须用malloc给这个结构体指针分配一个和结构体大小一样的内存空间,这样结构体指针就能正常操作。
当结构体成员为指针的时候,每当给这个成员赋值之前必须先为这个结构体成员分配一个内存空间!天啊,那程序中其不都是内存操作了!麻烦。改结构体:
typedef struct ElecStateStruct
{
char elec_name[10];
char elec_state[10];
} ElecStateStruce;
呵呵把成员改成数组来,虽然在应用上数组不如指针灵活,可是可以避免很多不必要的麻烦,指针一旦应用出错很有可能带来很多的问题,最终系统崩溃!
对于结构体数组的赋值需要用到:strcpy()函数,否则的话就用for循环一个个的赋值吧,呵呵!
文章评论(0条评论)
登录后参与讨论