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语言关于结构体做参数传递

首先结构体做函数参数有三种传递方式 一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。 以传引用调用方式传递结构比用传值方式传...

C语言关于结构体做参数传递

水平有限,谈谈自己的看法 首先结构体

C语言函数参数传递

  • 2013-07-14 23:21
  • 26KB
  • 下载

程序猿之---C语言细节8(函数参数传递、声明)

主要内容:函数参数传递、声明等细节 #include int ff(); // 1、当函数参数列表中没有char、short、float类型时(即限于int、double类型可以省略),函数...

关于C语言中函数调用和参数传递机制的探讨

关于C语言中函数调用和参数传递机制的探讨 函数,相信许多人也知道其重要性;一个文件往往由一个或者多个函数构成的。然而可能许多人还不知道函数调用的一些深层问题,所以我写的这篇文章一来是应 了一个好...

二维数组作为函数参数传递剖析(C语言)

http://www.cnblogs.com/yangxi/archive/2012/03/22/2411452.html 前言   很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来...

关于C语言中函数调用和参数传递机制的探讨

转自:http://bbs.bccn.net/thread-106533-1-1.html 函数,相信许多人也知道其重要性;一个文件往往由一个或者多个函数构成的。然而可能许多人还不知道函数调用的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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