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