C++指针、数组、引用、变量作函数参数的问题

哪位大神能帮我阐述下指针、数组、引用、变量作函数参数时的区别联系或者说有什么实质关系的... 哪位大神能帮我阐述下指针、数组、引用、变量作函数参数时的区别联系或者说有什么实质关系的 展开
 我来答
匿名用户
2012-08-01
展开全部
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。
如有函数声明:void swap(int a,int b); //功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。
2. 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接操作的就是原数据区的数据。好处是可以直接通过函数改变调用函数中的多个数据。
如有函数声明:void swap(int *a,int *b); 传递是指向所指空间的地址,执行后,直接交换了调用函数中的数据;
再如: void max(int a[],n),求数组a中的最大值。也是传递数组的地址,操作的是调用函数的数组元素。
3.引用作为参数,引用就是别名,其实也是地址传递,但它是常量地址
wangjiandtc
2012-08-01 · 超过13用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:34.2万
展开全部
指针是一个变量,变量里面存储了一个地址。
数组的本质是一个指针,该指针指向一段连续内存的首地址。
C语言本身没有引用,但可以用指针操作来实现。
假设int a = 1; int b = a;这样的是赋值操作 b 的值被福成了a的值,a和b是独立的变量
但 int a = 1; int *p = &a;这样的话&a 和 p指向通一个内存,那么a的值 发生变化的时候 *p也会发生变化,这就起到了引用的作用。

那么我们可以了解到指针,数组,引用其实都是指针。

那么指针做参数和普通变量做参数有什么区别呢。
其实不管是指针还是变量,在作为函数参数时都是值传递的。

比如函数
int foo(int i) {
i = 8;

}

int i = 1;
foo(i);

上面这段代码执行完成后 i 的值并不会变化,这是因为调用foo函数时只是把i的值1传给函数,而不是把变量传给函数。

再来看看地址的情况

int foo(int *p) {
p = (int *)malloc(sizeof(int));

}

int* i = null;
foo(i);

上面这段代码执行后 i依然是空指针,道理和前面是一样的。
但是指针在作为函数参数时有特殊的用途。

int foo(int *p) {
*p = 5;
}
int i = 1;
foo(&i);

上面这个代码执行后i的值将会变成1,这是为什么呢。因为调用函数时,将i的地址值传给了函数,在函数中操作地址所指向的内存块,这样就是操作i的值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zerowpt
2012-08-01 · TA获得超过449个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:93.6万
展开全部
按深浅顺序
变量做参数,一般都是用全局变量或者局部变量,然后通过赋值和调用来使用,可储存各种信息,但是信息量不会很大,这得看变量类型.
引用具体引用什么我不清楚,估计你的意思是引用全局变量?
数组是一种按有序地址存储无序信息的方式,做函数参数的时候多是循环调用,解决迭代回溯之类的函数较好用,关键就在数组名称对应的地址信息.
指针就比较大了,这个概念建议你看书,简单说C++的精髓就是这个指针,指针可以指向地址,也可以直接调用指针对应内容,特点就是改变指针的时候不改变指针地址所储存的内容,函数调用时指针是最好的调用方式,当然要按具体情况选择.
总的来说C++的函数调用主要是调用类库中的函数,通过接口传入类定义的类型的数据,返回值或过程.具体调用的方式以上几种都可以,都有相对方便的时候,比如小函数如计算什么的,用个局部变量就够了,而迭代算法用数组就很方便,而不想改变存储过程的时候用指针就很实用了.
希望对你有帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木子12王白石
2012-08-01 · 超过31用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:67.5万
展开全部
指针和引用的作用类似,都可以改变实参,但实质不一样,某些情况下的用法不一样。
它们只是传递参数的两种方式。
而数组和其它变量则作为参数被传递。
再说,这什么问题嘛,多用一下,就知道差异了。
我们老师说,编程不光是看书,而是要有自己的理解!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e96ae71ed
2012-08-01 · TA获得超过728个赞
知道小有建树答主
回答量:1548
采纳率:0%
帮助的人:713万
展开全部
具体问题具体分析
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式