1.除了数组外,其他都有副本机制(包括结构体数组)
2.结构体作为参数具有副本机制,结构体返回值也有副本机制 。
3.函数的参数和返回值都有他的副本机制。
#include
int a=10,b=20;
static int sum(int aa,int bb){
printf("the aa is 0x%p,%d",&aa,aa);
printf("\nthe bb is 0x%p,%d",&bb,bb);
aa=100;
return a+b;
}
int main(){
sum(a,b);
printf("\nthe a is 0x%p,%d",&a,a);
printf("\nthe b is 0x%p,%d",&b,b);
}
形参aa和bb是对a和b地址的拷贝。
#include
int array[2]={10,20};
static int arr(int arra[2]){
printf("\nthe array is 0x%p,%d",arra,arra[0]);
arra[0]=123;
return arra[0]+arra[1];
}
int main(){
arr(array);
printf("\nthe array is 0x%p,%d",array,array[0]);
return 0;
}
形参arra传入的是array的实际地址。
#include
typedef struct{
int ar[10];
int a;
}Struct;
Struct my;
static void fuzhif(Struct mystruct){
mystruct.a=10;
mystruct.ar[0]=0;
printf("\nthe mystruct address is:0x%p,ar address is:0x%p,%d,%d",&mystruct,mystruct.ar,mystruct.a,mystruct.ar[0]);
}
int main(){
my.a=100;
my.ar[0]=100;
printf("\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]);
fuzhif(my);
printf("\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]);
return 0;
}
形参mystruct传入的是结构体my的地址的拷贝。
#include
typedef struct{
int ar[10];
int a;
}Struct;
Struct my;
static void fuzhit(Struct *mystruct){
mystruct->a=10;
mystruct->ar[0]=0;
printf("\nthe mystruct address is 0x%p,ar address is:0x%p,%d,%d",mystruct,mystruct->ar,mystruct->a,mystruct->ar[0]);
}
int main(){
my.a=100;
my.ar[0]=100;
printf("\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]);
fuzhit(&my);
printf("\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]);
return 0;
}
如果形参为结构体变量,那么可以通过结构体指针修改某一结构体变量的值。