正文
c语言函数传参 c语言函数传参*和有什么区别
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
C语言函数调用的传参方法总结,Caller分配内存,Called填充内存
void called(int v){ v=2; }
void caller(){ int v=1; called(v); }
这种方式,called并不能改变caller里的v的值,因为called和caller的v分别是两个内存单元,因此只能单向的从caller到called传值,而不能从called到caller返回值。
void called(int *pv) { *pv=2; }
void caller(){ int v=1; called(v); }
这种方式,called能改变caller的值,因为值的内存由caller分配(int v=1;),而called能通过其指针改变这个内存的内容。
void called(int **ppv){ *ppv=malloc(sizeof(int)); }
void caller(){ int *pv=NULL; called(pv); }
这种方式,内存单元是由called分配在heap上的,想返回其地址给caller,因此caller需要提供一个地址的内存(int *pv=NULL;), 然后交由called去改变这个单元的值(called(pv))。需要注意的是,这个内存不能是在called的stack中,因为一旦called结束,栈中内存都会被销毁,其值和地址都将无效,因而只能返回在heap中的值和地址。
总之就是记住一个宗旨,如果想通过参数来获得返回值,需要在caller中为该返回值分配内存单元,然后将这个内存单元的地址传递给called函数,called函数通过改变这个地址所指向的内存值来返回所需。
c语言函数传参问题?
说下传值,传址以及引用吧。
传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。
说几点建议:
如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。
c语言向函数传递函数作为参数
#include stdio.h
//---子函数声明---//
int func1();
int func2(int (*func1)()); //形参为函数指针(即指向函数的指针)
//---主函数---//
int main(){
printf("向函数二传递函数一,\n即函数一作为函数二的参数。\n");
printf("%d ",func1());
printf("%d\n",func2(func1));//注意函数名即为函数地址!!!!!!
} //实参为函数名func1或者func1,两者等价,而非func1()
//---子函数定义---//
int func1(){
return 1;
}
int func2(int (*func1)()){ //形参为函数指针(即指向函数的指针)
return func1()+1;
}
C语言自定义函数怎么传参,是一次性把数组的数据全部传入吗?
1、因为数组在内存中是一块连续的内存,只要将该数组的首地址传进去,当然就可以访问整个数组了。值得注意的是,由于只传了首地址,函数不知道数组的维数,所以还得把数组的维数传进去,那就可以完全操作该数组了。\x0d\x0a\x0d\x0a2、例:有一个函数声明:void fun( int aa[],int size );或者void fun( int *pa,int size );\x0d\x0a以上两种声明都一样。\x0d\x0a调用上诉函数时:假设有 int ab[10];\x0d\x0afun( ab,10 )就可以了。
C语言函数参数的传入
你这是
参数传递
进去的其实是数组的地址c语言函数传参,在函数内部修改c语言函数传参了以后c语言函数传参,数组的内容就已经真正的修改了,所以函数返回以后,继续访问这个数组,得到的数据就是修改以后的。
比如c语言函数传参:
int array[12][12];
copy_arcs(arrar)
在访问array就是修改后的数据了
c语言函数传参的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言函数传参*和有什么区别、c语言函数传参的信息别忘了在本站进行查找喔。