C语言之struct参数传递与结构匹配

转载 2012年03月25日 01:17:54
C语言之struct参数传递与结构匹配

1、结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同:

首先结构体可以在一个结构中声明不同的数据类型;

第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称可看作常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。
由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。 
结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。


2、结构体作函数参数可以整个结构体作函数参数。 
整个结构体作函数参数,必须保证实参与形参的类型相同,实际上是将实参结构体成员值对应传递给形参结构体成员。数组传递的是首地址。
虽然结构体能整体作函数参数,但要将全部成员值一个一个传递,开销比较大。
结构体数组看上去与一般数组类似,也是一种数据类型,一组数据。
但结构体作为参数,是一组数据的collection,因此,不同于数组(只传递首地址,蜕化成指针),而是将所有成员变量都复制。因此,一般使用指针较好。

3、不是进行成员类型匹配,而是struct 结构匹配。 
  #include <stdio.h> 
 2 
 3 struct 
 4 {
 5                 char  a;
 6                 int  b;
 7 } Sa = {'a' , 1 };
 8 struct 
 9 {
10                 char  a;
11                 int  b;
12 } Sb = Sa;
13 
14 int  main()
15 {
16         
17   return  0 ;
18 }

编译结果:
t.c:12: error: invalid initializer 

虽然两个struct看上去类似,由于上一篇文章提到的可能存储分配不同,导致结构不匹配,不能赋值。
可以进行如下改进:
struct stru

{
                  char  a;
                  int  b;
};

struct stru Sa =  {'a' , 1 };

struct stru Sb = Sa;

这样,两个结构体变量结构匹配了。

C 结构体 struct 详解

数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为...
  • zhanghow
  • zhanghow
  • 2016年12月05日 11:47
  • 2561

结构体类型struct(c++)

本文简单介绍了定义结构体的三种形式,嵌套结构体,结构体变量的初始化,结构体变量成员的引用方法,以及结构体指针...
  • sinat_34927324
  • sinat_34927324
  • 2016年12月23日 20:04
  • 419

struct结构体占内存大小计算

struct结构体占内存大小计算      注意:struct 的{}后面要加上 ”;“ #include struct A {            ...
  • seekcreation
  • seekcreation
  • 2013年10月25日 21:01
  • 4492

C语言 struct结构体的变量声明加冒号

本文详细介绍了结构体中位域相关使用说明。有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处...
  • aoshilang2249
  • aoshilang2249
  • 2014年07月15日 16:45
  • 4536

Java 结构体之 JavaStruct 使用教程<三> JavaStruct 数组进阶

经过前面两篇博客的介绍,相信对于 JavaStruct 的认识以及编程使用,读者已经有一定的基础了。只要理解和实践结合起来,掌握还是很容易的。下面进行一些数组使用方面的实例说明及演示。 在结构体类中使...
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2017年07月21日 18:07
  • 1251

C# struct(结构)与按值复制、按索引复制详解

本文讲解了struct的用法以及按值复制、按索引复制的不同。struct是结构(structure)的简写,struct看上去与类非常相似,它们也有字段和属性。...
  • u013180863
  • u013180863
  • 2015年09月23日 15:33
  • 1467

结构体定义 typedef struct 用法详解和用法小结

typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。 具体区别在于: 若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,...
  • mpp_king
  • mpp_king
  • 2017年04月18日 15:46
  • 2691

Go语言核心之美 3.4-Struct结构体

struct结构体也是一种聚合的数据类型,结构体中可以有零个或多个任意类型的值-结构体的成员。用来演示struct的一个经典案例就是公司的员工信息,每条员工信息都包含:员工编号,姓名,住址,出生日期,...
  • abv123456789
  • abv123456789
  • 2016年03月25日 17:46
  • 9828

关于C中struct结构体的动态malloc和memcpy的指针操作

今天碰到一个问题,先贴代码:typedef struct Gifheader { char Signature[3]; char Version[3]; gifhea...
  • dgj8300
  • dgj8300
  • 2016年04月17日 01:17
  • 2109

Matlab 结构体(struct)使用

转自http://blog.sina.com.cn/s/blog_468651400100c6c0.html 要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB...
  • a573233077
  • a573233077
  • 2014年10月22日 21:57
  • 3119
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言之struct参数传递与结构匹配
举报原因:
原因补充:

(最多只允许输入30个字)