永发信息网

C语言 指针做函数参数 的优点

答案:5  悬赏:10  手机版
解决时间 2021-03-17 14:06
C语言 指针做函数参数 的优点
最佳答案
首先你要认识函数传参是怎么进行的

函数传参是复制形的,举个例子说:

void modify(int a)
{
a++;
}

void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。

现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}

void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。

现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。

你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。

多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。
全部回答
指针说白了就是地址,内存变量的地址。
指针作参数说不上有什么优点。就是当你在子函数中要对你的主调用函数中变量进行操作时就必须用到指针做参数,也就是把主调用函数中变量的地址传到被调用函数中去,这样才能实现对主调函数变量的操作。如果不是用指针变量,而是一个普通变量的话是无法传递主函数的变量地址的,这里涉及到函数的传值和传址的区别。如果不了解这个最好找个书看看,一定要仔细理解。
对于你的“为什么函数参数是字符串的多用指针?”这句话我不是太理解。
至于何时该用指针何时不该用,我上面已经说清楚了。如果你是C语言的初学者可能会不太理解,那么你就仔细去研究一下教材吧。
1,回调函数,例如signal(int,sighandler_t)
动态改变调用
void sort(void* beg,void*end,bool(*compare)(viod *a,void*b) );
2字符串数组当参数会自动变成指针
int foo(char a[]);
int foo(const char* a);一样
第一,可以用指针修改指针指向的变量,否则只改变此变量的拷贝
第二,利用指针的指针增加安全性
“字符串的多用指针”是指char *argv[]吧
我的感觉就是高效!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
佳诚木业地址有知道的么?有点事想过去
求教:标致207自动挡挂档时异响
商店从工厂批发了80台复读机,每台120元.商
水利水电工程量清单计价规范(GB50501-2007中
模具加工需要平面图纸吗
一心装饰我想知道这个在什么地方
关于菌落计数报告规则的疑问
colleage是大学的意思?
剪线头手工活能招13岁小孩吗
茄子拖叶的做法
振华副食批发超市地址在哪,我要去那里办事
哈佛h2 的前脸塑料被撞坏了 换一个多少钱
夫妻吵架女方离家出走后,想回来怎么办
在沈阳,天童美语有哪些分校啊?都在哪?
床边一边放床头柜一边放梳妆台,另一个床头柜
推荐资讯
我在无锡地区每月交医保养老保险一千到十五年
4、数100本练习本要用90秒,照这样的速度数一
13号地铁汉中路到丰庄路票价多少钱
济南市的气候类型属于A.温带大陆性气候B.温带
到底达尔文进化论能不能解释寒武纪生物大爆发
武汉的唐狮专卖店在那里?
联合婚介所地址在什么地方,想过去办事
赛纳合让村地址在什么地方,想过去办事
郓城县潘渡镇陈栈村村民委员会在什么地方啊,
创意主题:环保。。利用身边废旧物品手工制做
手机下载软件却一直提示内存不足,但是手机内
中国银行个人定期存单(定活两便)可以在外省
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?