C 结构体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 结构体相关的知识,希望对你有一定的参考价值。
ouoguegjie在C中结构体可以理解为与C#中的结构提一样是值类型。所以要进行传址应用的话,需要使用*(指针)的知识。这是本篇的重点。但是,现在由浅入深,废话少说,Go!!!!!!!!
一,关于结构体的申明及使用:
总的 : 结构体放在main的前面 , 它的类型是 struct structname(自己定义的机构体名)
①:使用数组定义字符串
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Monster { int id; char name[50]; int level; int skill; char desc[50]; }; int main() { struct Monster godzilla; godzilla.id = 1; strcpy(godzilla.name,"哥斯拉");//因为使用数组的方式(相当于已经定义了一个字符串了 , 和高级的不一样 , 麻烦 : 这点注意),所以这里面应该使用copy的方式 , 而不能使用 ="" 或者 {‘‘,‘‘} godzilla.level = 1; godzilla.skill = 0; strcpy(godzilla.desc,"强力撕咬"); printf("..........................................\n"); printf("怪物的名字 : %s\n" , godzilla.name); printf("..........................................\n"); //还可以这样复制 struct Monster godzilla1 = {2,"S2",.desc="AAAAAA"}; printf("怪物的名字 : %s\n" , godzilla1.desc); return 0; }
结果:
1,char name[50] 相当与=于已经定义了一个字符串(字符串存在),所以不能再使用 =“abc” 或者 {‘a’, ‘b‘ , ‘c‘ , ‘\0‘}给它已经初始化的赋值了
2,struct Monster godzilla1 = {2,"S2",.desc="AAAAAA"}; 这个方式类似与C#的赋值方法 , 可以按照顺序来,当要特定为某一成员赋值时 : 使用.+成员名来获得成员
② :使用*(指针)定义字符串
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Monster { int id; char * name; }; int main() { struct Monster godzilla; godzilla.id = 0; godzilla.name = calloc(20,sizeof(char)); printf("请输入怪物的名字 :"); scanf("%s",godzilla.name); //godzilla.name = "哥斯拉"; printf("怪物的名字 %s\n",godzilla.name); return 0; }
结果:
1,使用 char * name来定义字符串动态录入时,因为字符串没有内存,所以赋值是必须使用malloc或者calloc来动态的获取内存。使用比字符串数组要爽
静态的:
int main() { struct Monster godzilla; godzilla.id = 0; //godzilla.name = calloc(20,sizeof(char)); //printf("请输入怪物的名字 :"); //scanf("%s",godzilla.name); godzilla.name = "哥斯拉"; printf("怪物的名字 %s\n",godzilla.name); return 0; }
2,缺陷,不使用后记得free掉*
3,任然可以使用 {2,"S2",.desc="AAAAAA"} 这种方式
重点 , 单纯传递结构体是传值,要传其地址(应用得使用*)
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Monster { int id; char * name; }M;//为结构重新命名M void GetStruct( M * m); void GetStruct( M *m) { m->id = 2; m->name = "Aonaufly"; } int main() { struct Monster godzilla; godzilla.id = 0; //godzilla.name = calloc(20,sizeof(char)); //printf("请输入怪物的名字 :"); //scanf("%s",godzilla.name); godzilla.name = "哥斯拉"; GetStruct(&godzilla); printf("怪物的名字 %s\n",godzilla.name); return 0; }
结果:
解释:
typedef 即为类型 struct Monster 起一个名字 : M
其实 struct Monster godzilla 可以写为 M godzilla
本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1918520
以上是关于C 结构体的主要内容,如果未能解决你的问题,请参考以下文章