c语言结构体中的结构体,c语言中结构体的概念,C语言结构体的全方面解读

c语言结构体中的结构体,c语言中结构体的概念,C语言结构体的全方面解读

数组允许你定义可以存储相同类型数据项的变量。结构是C编程中另一种用户定义的可用数据类型,它允许您存储不同类型的数据项。

目录

前言1。结构1的声明和定义。结构2的声明。结构构件的类型。结构2的定义。结构3的初始化。接近结构构件4。结构5的嵌套。结构6的指针。结构参考摘要。

前言

c提供了不同的数据类型,如int、float、double、char等。不同的类型决定了变量在内存中应该占据的空间及其表示形式。

但是我们在定义一个人的时候,用相同的数据类型来定义一个人的不同属性是比较困难的,因为人的身高、年龄、体重等属性往往需要不同的数据类型。这时,我们引入结构的概念。

一、结构体的声明与定义

1.结构体的声明

结构是称为成员变量的值的集合。结构的每个成员可以是不同类型的变量。

当我们面对的事物有许多不同的数据类型时,我们可以使用结构来组织它们。

例如,一本书有不同的数据类型,如标题、作者、售价、出版日期等。这时,我们可以创建结构来包含不同数据类型的书籍。

结构声明是描述结构组合的主要方法,语法格式为:

结构名称

{

成员1;

成员2;

成员3;

};//分号不能丢

[注意]

结构成员可以是任何基本数据类型,也可以是另一种结构,后者相当于结构的嵌套。(俗称娃娃)

例如:

strut Book//描述一本书的相关属性,其中Book是这个框架的名称。

{

char name[20];//书名

char作者[20];//作者

浮动价格;//价格

};//分号不能丢失。

这相当于描述了一本书的框架。

2.结构成员的类型

结构的类型可以是标量、数组、指针甚至其他结构。

3.结构体的定义

结构的声明只是一个简单的描述。事实上,在定义结构类型变量之前,它不会分配内存空间。

也就是说还没有真正使用过,虚拟存在只存在于定义结构类型变量的时候。

例如,它定义了一本书的框架。

strut Book//描述一本书的相关属性,其中Book是这个框架的名称。

{

char name[20];//书名

char作者[20];//作者

浮动价格;//价格

};//分号不能丢失。

这里,在编译器中,内存空间是不分配的,它只是虚拟存在。一旦我们定义了结构类型变量,就可以给它分配空间。

例如:

strut Book//描述一本书的相关属性,其中Book是这个框架的名称。

{

char name[20];//书名

char作者[20];//作者

浮动价格;//价格

};//分号不能丢失。

int main()

{

结构书书;//局部变量——将它们放入堆栈区域

返回0;

}

我们还可以注意到,在上面的例子中,定义结构变量的语法是:

结构结构名结构变量名

此外,还可以在声明结构时定义结构变量。

strut book//描述一本书的相关属性。

{

char name[20];

char作者[20];

浮动价格;

}b1,B2;//b1,b2是全局变量。把它放在静态区域。

int main()

{

结构书书;//局部变量——将它们放入堆栈区域

返回0;

}

B1和b2结构变量是全局变量,也可以在其他函数中访问。

二、初始化结构体

我们可以在定义变量或数组时初始化它,

例如:

int a=10

int arr[10]={1,2,3,4,5,6,7,8,9,0 };

同样,在定义结构变量时,我们也可以同时对其进行初始化。

strut book//描述一本书的相关属性。

{

char name[20];

char作者[20];

浮动价格;

}b1,B2;//b1,b2是全局变量。把它放在静态区域。

int main()

{

结构书book=

{

《笑傲江湖》”,《金庸》,30

};//在这种情况下,结构变量被初始化,即变量被定义并被赋予初始值。

返回0;

}

三、访问结构体成员

结构变量访问成员结构变量的成员是通过点运算符(.).点运算符接受两个操作数。

例如,book.name引用book结构变量的name成员,它是一个字符数组。

#包含stdio.h

strut book//描述一本书的相关属性。

{

char name[20];

char作者[20];

浮动价格;

}b1,B2;//b1,b2是全局变量。把它放在静态区域。

int main()

{

结构书book=

{

《笑傲江湖》”,《金庸》,30

};//在这种情况下,结构变量被初始化,即变量被定义并被赋予初始值。

printf('%s %s %f\n ',book.name,book.author,book . price);

//使用。访问

返回0;

}

四、结构体嵌套

如果访问嵌套结构成员,则需要使用多级点运算符。因为C语言的结构只能访问最底层的成员,如果有多级结构嵌套,就要逐级深入,直到找到最底层的成员。

结构S

{

int a;

char c;

双d;

};

结构T

{

结构S;//结构嵌套

char name[20];

int num

};

int main()

{

Struct t t t={{100,' C ',3.14},' Reese ',30 };

printf('%d %c %f %s %d\n ',t.s.a,t.s.c,t.s.d,t.name,t . num);//两层点运算符用于查找成员

返回0;

}

五、结构体指针

正如我们在开头所说,结构的成员可以是标量、数组和指针。

这里,我们来认识一下结构指针。

结构书* pt

这里声明了一个指向图书结构类型的指针变量pt。

结构S

{

int a;

char c;

双d;

};

结构T

{

结构S;

char name[20];

int num

};

int main()

{

Struct t t t={{100,' C ',3.14},' Reese ',30 };

printf('%d %c %f %s %d\n ',t.s.a,t.s.c,t.s.d,t.name,t . num);

struct T * pt=t//获取地址的方式

printf('%d %c %f %s %d\n ',(*pt).s.a,(*pt).s.c,(*pt).s.d,(*pt)。姓名,(*pt)。num);

printf('%d %c %f %s %d\n ',pt-s.a,pt-s.c,pt-s.d,pt-name,pt-num);

返回0;

}

[注意]数组名指向第一个元素的地址,所以可以直接将数组名赋给指针变量。但是,结构变量的变量名不是结构的地址,所以需要地址操作符()来获取它的地址。

如上:

struct T * pt=t//获取地址的方式

通过上面的例子,我们还可以发现,通过结构指针访问结构成员有以下两种方式:

(1)(*结构指针)。成员名称

(2)结构指针-成员名

第一,因为点运算符(。)的优先级比指针的值操作符(*)高,应该先用slogan解引用指针,使其成为结构的变量,然后用点操作符访问其成员。

以上两种方法在实现上是完全等价的。但是,请记住,点(。)只能用于结构,而箭头(-)只能用于结构指针。

[相同的打印结果]

当两种方法都可以使用时,首选第二种方法,因为箭头是有方向的,所以可以直接与指针链接。

六、结构体传参

调用函数时,参数的传递就是值的传递过程,也就是将实参传递给形参的过程。所以结构变量可以作为函数的参数传递,两个结构类型相同的结构变量也支持直接赋值。

结构S

{

int arr[100];

int num

char ch

双d;

};

//结构传递参数

无效打印1(结构ss)

{

printf('%d %d %d %c ',ss.arr[0],ss.arr[2],ss.num,ss.ch,ss . d);

}

//结构地址作为参数传递。

无效打印2(结构S*ps)

{

printf('%d %d %d %c ',ps-arr[0],ps-arr[2],ps-num,ps-ch,PS-d);

}

int main()

{

struct S s={ {,2,3,4,5},100,' w ',3.14 };

打印1份;//传输结构

打印2份;//地址传输

返回0;

}

如您所见,参数实际上是被传递的。

那么,以上print1和print2功能哪个更好呢?

答案是:首选print2函数。原因:

当函数传递参数时,参数需要堆叠。传递一个结构对象时,结构过大,参数堆栈开销比较大,会导致性能下降。

因此,当结构作为参数传递时,应该传递该结构的地址。

总结

本文介绍了一些C语言结构的基础知识,结构的内容远不止这些。以后学了更深层次的内容,可能会再写一篇博客深入介绍。另外,本文参考了小乌龟的书《零基础入门学习C语言》,以及网上的一些资料,结合自己在学习和听课过程中的笔记进行梳理。可能会有遗漏,内容来源,或者解释上的遗漏。请包含并原谅我们!

希望能对看到的各位有所帮助!

关于C语言结构的全方位解读这篇文章就到这里。有关C语言结构的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: