标签: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 结构体
原文地址:http://aonaufly.blog.51cto.com/3554853/1918520