C语言 两个跟结构(struct)有关的参数传递问题


 一、int型变量i跟只包含一个int型成员的结构变量s在参数传递时的不同

  参数在传递时首先尽可能地存放到寄存器中(追求速度)。注意,int型变量i跟只包含一个int型的成员的结构struct变量s在参数传递时的方式可能完全不同。一个int型参数一般会被传递到寄存器中,而结构struct参数则很可能被传递到堆栈中。(一个放在CPU中,一个放在内存中)


二、在结构struct中放置数组

/* 数组位于结构内部 */
struct s_tag {int a[100];}

   现在,可以把数组当作第一等级的类型,用赋值语句拷贝整个数组,以传值调用的方式把它传递到函数,或者把它作为函数的返回类型

 1 struct s_tag { int a[100]; };
 2 struct s_tag orange,  lime, lemon;
 3 struct s_tag twofold{struct s_tag s){    //以传值调用的方式把它传递到函数
 4     int j;
 5     for( j=0; j<100; j++) s.a[j] *=2;
 6     return s;      //把它作为函数的返回类型
 7 }
 8 
 9 main(){
10     int i;
11     for(i=0; i<100; i++) lime.a[i]=1;
12     lemon = twofold(lime);
13     orange = lemon;     //用赋值语句拷贝整个数组
14 }

   在典型情况下,并不会频繁地对整个数组进行赋值操作。但是如果要这样做,可以通过把它放入结构中来实现。