1.7 C之 指针与函数传参(挺骚)
前置++和后置++的区别
前置++称为前自加,后置的++称为后自加。其计算效果均为操作数自加一。
当单独一个语句的时候没有区别,如果用在表达式中:
i++是先自加,然后在取i的值做计算。
int i =2, j;
如果
j = i++;
那么先取i的赋值给j,于是j值为2,i值再自加,i=3。
如果
j =++i;
那么i先自加,得到i = 2,然后再取i计算,j值为3。
函数传参中使用的指针
int add(int a,int b)函数传参使用了int型数,本身是数值类型。实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算。实参自己实际是不参与的。所以,在函数中,是没发改变实参本身的。
#include<stdio.h>
int main(void)
{
int x,y;
x = 5;
y = 3;
printf("before swap: x = %d,y = %d.\n",x,y);
swap(x,y);
printf("after swap: x = %d,y = %d.\n",x,y);
前置++称为前自加,后置的++称为后自加。其计算效果均为操作数自加一。
当单独一个语句的时候没有区别,如果用在表达式中:
i++是先自加,然后在取i的值做计算。
int i =2, j;
如果
j = i++;
那么先取i的赋值给j,于是j值为2,i值再自加,i=3。
如果
j =++i;
那么i先自加,得到i = 2,然后再取i计算,j值为3。
函数传参中使用的指针
int add(int a,int b)函数传参使用了int型数,本身是数值类型。实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算。实参自己实际是不参与的。所以,在函数中,是没发改变实参本身的。
#include<stdio.h>
int main(void)
{
int x,y;
x = 5;
y = 3;
printf("before swap: x = %d,y = %d.\n",x,y);
swap(x,y);
printf("after swap: x = %d,y = %d.\n",x,y);
} //在函数内部,交换a和b的值 //实际测试结果失败,并没有交换。 //原因:C语言中,函数调用时,实参传递给形参实际是传值调用。也就是说,实参x和y将自己的值拷贝一份传给形参a和b,在子函数swap中实际交换的是a和b,而不是实参x和y,因为函数执行完后,x和y的值依然,并没有被交换。 int swap(int a,int b) { int swap; temp = a ; a = b; b = temp; return 0; } ______________________________________________ //在函数内部,交换a和b的值。 //测试结果:交换成功。 //原因:c语言函数调用时,一直都是函数调用。也就是实际传递的一直都是实参的拷贝。但是本函数中形参和实参都并不是x和y,而是x和y的地址值。这样让我们在函数中通过间接访问*p的方式,在函数内访问到了函数外面调用时的实参。 #include<stdio.h> int main(void) { int x,y; x = 5; y = 3; printf("before swap: x = %d,y = %d.\n",x,y); swap_pointer(&x,&y); printf("after swap: x = %d,y = %d.\n",x,y); } int swap_pointer(int *p1,int *p2) { int temp; temp= *p1; //实际调用时,p1得到的实参是x的地址&x, *p1代表的就是x *p2 = *p2; *p2 = temp; return 0 ; }
相关推荐
shangs00 2019-10-29
文山羊 2011-10-08
wuShiJingZuo 2008-07-27
luoshen 2011-04-29
86201242 2012-06-07
85437811 2011-11-08
良哉 2019-05-06
chengdongyuan 2015-04-13
虫二在路上 2019-04-26
zzpdljd 2014-06-09
TheTeenager 2009-08-27
游离丸子 2009-07-31
丁一鸣的CSDN 2012-07-12
wangchaoxiaoban 2010-11-11
houjinkai 2009-11-28
缘自一线 2009-07-25
wujimiao 2009-02-19
你好C 2018-02-23