首页 > 编程知识 正文

c语言函数值传递,c语言函数的传值和传地址

时间:2023-05-05 08:24:56 阅读:135854 作者:4452

当前位置:我的异常网络C语言函数调用时的参数传递研究(强烈推荐),该如何处理

函数调用时的参数传递研究(强烈推荐),该如何处理

www.myexceptions.net网友分享: 2013-02-04陟览: 10次

函数调用时的参数传递研究(强烈推荐) ) ) ) ) ) )。

函数调用时的参数传递研究

众所周知,调用c函数时有两种方法3360值传递和地址传递:

交货,例如:

voidswap(inta,int b ) )。

{

int temp;

temp=a;

a=b;

b=temp;

}

语音测试(void ) )。

{

intm(5)、n ) 9;

swap(m,n );

}

函数的执行结果,调用函数test中的m,n没有变化,肯定很清楚调用函数swap中的局部变量a,b被交换。

地址传输,例如:

voidswap(int*a,int* b ) )。

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

语音测试(void ) )。

{

intm(5)、n ) 9;

swap(m,n );

}

其作用类似,但调用函数和被调用函数的变量内容将被交换。

看起来很简单吧。 那么,下一个例子是通过价格还是通过地址?

voidgetmemory(char*p,int num ) )。

{

p=(char* ) malloc(sizeof ) char ) * num );

}

语音测试(void ) )。

{

char *str=NULL;

获取存储器(str,100 ); //str还为空

strcpy(str,' hello ' ); //运行错误

}

答案是交货。 明明给了指针,为什么要给价呢? 其实,在编译器中,是通过价格传递还是通过地址传递,并不是看是否传递了指针,而是看调用函数的(test )的实际参数是否是变量本身

还是变量的地址? 此变量可以是int、float、char,也可以是指针int*、float*、char*。 在本例中,传递了指针变量char* str,因此传递值。 正确地知道是讲价还是地址是有什么意义的。

区分的差异对于实现高质量的编程很重要。当传递值时,编译器会简单地备份实际参数并完成被调用的函数功能; 地址传输在两种情况下使用:

1 .需要将较大的对象或实例作为参数传递给调用的函数时

2 .如果必须修改并返回参数值

第一种情况实际上是我们上面的例子,严格来说,那是交货,我把它称为伪地址交货。 关于第二种情况,你一定遇到过类似下面例子的用法。

voidgetmemory2(char**p,int num ) )。

{

*p=(char* ) malloc ) sizeof ) char ) * num );

}

语音测试2 (语音) )。

{

char *str=NULL;

获取存储器2 (str,100 ); //注意参数是str而不是str

strcpy(str,' hello ' );

cout str endl;

free(str );

}

在本例中,str动态地为被调用的函数分配内存,而调用函数test使用在GetMemory2中更改的参数,但实际上会遇到许多类似的使用情况。 很遗憾,关于价格传递,在地址传递的一般c教程中

无法区分这些差异,这些差异会给初学者带来很大的误解,所以: )

函数调用时的参数传递研究

*p可以认为是*p的地址传递吧

一开始不知道要把什么放回指针,但经过多次尝试,我知道是否应该使用辅助指针的形状。 当然,如果要返回二次指针的值,就应该使用三次指针

接下来类推

函数调用时的参数传递研究

--

对char * a来说,是如何划分的:

func(a )是被传递的a本身还是a的地址?

在上面的示例中,更改如下

([code]voidswap(int*a,int* b ) )。

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

语音测试(void ) )。

{

int *m,*n;

m=(int* ) malloc(1) 1;

文章评论

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。