1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言结构体(初识struct)

C语言结构体(初识struct)

时间:2020-10-30 23:01:01

相关推荐

C语言结构体(初识struct)

C语言萌新入门学习记录屎

第003章——初识结构体(struct)

C语言结构体

C语言萌新入门学习记录屎结构体是什么?一、结构声明(struct关键词)(1)语法格式:(2)举例 二、结构体变量定义结构体变量额外(define和typedef的区别) 三.获取结构体成员扩充:C语言中英文字符占用字节长度 四、结构体变量和指针总结

结构体是什么?

结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型(整型、浮点型、字符型、指针型和无值型)。构成结构的每一个类型变量称为成员,它和数组的元素一样,但数组中元素是以下标来访问的,而结构是按变量名字来访问成员的。

在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同类型,成员一般用名字访问。

其实说白了,就是把一些变量组合一起来,比如你要用一个结构体描述一个学生信息:{学生名字;学生年龄;学生成绩}。

一、结构声明(struct关键词)

(1)语法格式:

struct 结构名{成员列表;};

(2)举例

//创建一个类型struct Stu{char name[20]; //注意:此处的20表示名字的长度,而非20个名字int age;double score;};

二、结构体变量

定义结构体变量

struct Stu 结构体变量名;

struct Stu s = {"张三",20,98.9};

也可以在定义结构体时直接定义结构变量并赋值:

struct Stu{char name[20]; int age;double score;}s = {"张三",20,98.9};

当然也可以使用typedef

//利用 typedef 定义这个结构体typedef struct{char name[6];int age;double price;}stu;int main(){stu s = {"张三",20,98.9};//结构体初始化printf("%s %d %lf\n",s.name,s.age,s.price);}

其外,typedef也可以为已有结构取别名。

例如:我现在有一个结构:student

struct studentsedfesgvsfesf{char name[20]; int age;double score;};

定义变量的时候你就是struct studentsedfesgvsfesf s ={…;…;…}

你嫌烦,然后就可以使用typedef起别名啦

typedef struct studentsedfesgvsfesf stu

现在你的结构体就叫stu啦!

也可以使用define

#define student struct stu student{char name[6];int age;double price;};int main(){student s = {"张三",20,98.9};printf("%s %d %lf\n",s.name,s.age,s.price);}

也就是用define宏定义一个常量来表示一个结构体

额外(define和typedef的区别)

define是预处理指令,在编译时不进行任何检查,只进行简单的替换,typedef是一种存储类的关键字。typedef用来定义类型的别名,便于记忆。define除了取别名,还能定义常量、变量、编译开关等。typedef 能够保证定义的所有变量均为同一类型,而 define 则无法保证。(此处仅展示对指针操作)

#define stu int*;s s1,s2;

s1,s2类型不同,s1为指向整型的指针变量,s2为整型变量。

typedef int* stu;s s1,s2;//s1,s2 类型相同

s1,s2类型同为指向整型的指针

三.获取结构体成员

结构体变量.成员变量

和python中的实例化对象意思差不多

printf("%s %d %lf\n",s.name,s.age,s.score);

运行结果:

张三 20 98.90

整合一下代码:

struct Stu{char name[2];int age;double price;};int main(){struct Stu s = {"张三",20,98.9};printf("%s %d %lf\n",s.name,s.age,s.score);}

诶,然后你发现怎么复制博主的代码报错咧。对是的,注意看char name[2];对呀,你不是之前说[ ]里面的数表示是字符串的长度嘛,没错啊。

漏!!!

问题:在UTF-8编码中:一个英文字符等于1个字节,一个中文(含繁体)等于3个字节。

现在赶紧去查看查看,你得默认编码格式吧。

左下角的小齿轮- ->设置- ->输入encoding,查看自己的编码格式。

扩充:C语言中英文字符占用字节长度

ASCII码中:一个英文字母占1个字节(byte),一个中文汉字占2个字节。UTF-8编码中:一个英文字符占1个字节,一个中文(含繁体)占3个字节。Unicode编码中:一个英文字符占2个字节,一个中文(含繁体)占2个字节。注意:英文标点占1个字节;中文标点占2个字节。UTF-16编码中:一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。GBK编码中:一个英文字母字符占1个字节,一个中文占2个字节。

好知道了这些,那我再来,我这么写:

struct Stu{char name[6];};int main(){struct Stu s = {"张三"};printf("%s\n",s.name);}

结果运行结果是:

张三n、张三~、张三j......(反正就是张三+一个随机字符)

看到这里,大概大家应该也意识到了问题

c语言字符串中有一个隐藏的结束标志“\0”,虽然“\0”不计入字符串长度,但是要占用内存空间一个字节,所以要留出一个字节存储“\0”。此处详细可看主页,某文章(还没写,过两天写)

四、结构体变量和指针

结构体类型指针访问成员的获取和赋值形式:

(*变量名).成员名

struct Stu* 表明指针类型为结构体指针

struct Stu{char name[2];int age;double price;};int main(){struct Stu s = {"张三",20,98.9};struct Stu* p = &s;//取缔值符&来取s地址printf("%s %d %lf\n",(*p).name,(*p).age,(*p).score);}

理解一下就是,p为指针,前面加个*解引用一下,就是s嘛,可以理解为(*p)=s

当然还有更简单的写法

结构体指针->成员变量

printf("%s %d %lf\n",p->name,p->age,p->score);

先找到指针指向的对象,然后再找成员。(->指向符)

总结

以上就是今天要记录的内容,本文仅仅简单介绍了对结构体的初印象(小白专属,当然我也是初学),希望有所帮助。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。