1 .传价和传址
)1)值传递:对于“值(例如,数字10 )”,传递参数是将参数的值复制到临时存储装置中。 在调用的函数结束时释放。 在调用过程中更改参数的值不会影响参数本身。 也就是说,参数保持调用前的值
)2)传递地址:在“地址(例如0019FEDC )”中传递参数,将实际参数变量的地址传递给调用函数。 形状参数和实际参数共享存储器的相同地址。 在被调用的过程中,如果形参的值发生变化,则对应的实参的值也会发生变化
注:传价将在函数调用过程中为形参重新开拓空间。 形参和实参各自占用不同的地址空间。 地址传递,形参和实参共享同一个存储器地址
提心吊胆:
传递值(传递普通类型变量的参数) )
voidfun1(inta ) {
a=2;
printf('fun1函数中,变量a的值的地址为:%pn ',a );
a=a 1;
}
void main () }
int n=1;
printf('main函数中,变量n的地址为:%pn ',n );
fun1(n;
printf (在对fun 1函数中的形参a加1后,实参n的值为%d(n ),n ); //n的值是怡园奥特曼不变还是1
}
执行结果
地址传递(以指针为参数) )。
voidfun2(int*q ) {
printf(fun2函数中q的值)为m个地址,与p的值相同) :%p(n ),q;
*q=*q 5;
}
void main () }
int m=10
int *p=m;
printf (在主函数中,为m值的地址:%p(n ),m );
printf (在主函数中,p指针的值(p指定的变量的地址) :%pn )、p );
printf('main函数中,p指针的地址(指针变量本身也占存储单元) :%pn ',p );
fun2(p; //传递的是p的值,该值是m的地址
printf (执行' fun 2函数后,m的值(因为形参和实参的共享存储器的相同地址,所以形参改变后实参也改变) :%dn ',m );
}
注:“*”有两个作用。 作用一(指针变量的定义(int *p; 作用2 (取值(int m=10; int p=m; printf(*p )//输出10
执行结果
数组名称的参数传递
“数组名称值”和数组地址存储数组的起始地址
voidfun3(intarr[] ) {
for(intI=0; i5; I ) {
printf('%d ',arr[i] );
}
}
voidfun4(int*arr ) {
for(intI=0; i5; I ) {
printf('%d ',arr[i] );
}
}
void main () }
intarr [5]={ 1,3,5,7,9 };
int*r;
r=arr;
fun3(arr ); //传递数组名称
打印((n );
fun4(r; //传递指针
打印((n );
printf (数组名称值:%p(n ),arr );
printf ('数组的地址值:%pn ',arr );
}
执行结果