返回信息流如题,
看到,在C++的函数参数中,有同时使用 * 和 &表示某个字符串参数,
void func(const char*& ch)
{
}
请问,这是什么意思和目的呢?
最好能再举些使用的例子。
谢谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #4810同步于 2008/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教C++函数参数中,同时使用 * 和 & 表示字符串,是什么意思啊
LeonTown
2008/4/10镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 LeonTown 的大作中提到: 】
: 如题,
: 看到,在C++的函数参数中,有同时使用 * 和 &表示某个字符串参数,
: void func(const char*& ch)
: ...................
这应该和1楼说的一样,指针的引用
通常为一个复杂的参数传递个引用是为了减少拷贝的工作量,提高效率
而如果传个简单的数据类型,是为了在函数里面的修改能影响到函数外面的量
【 在 LeonTown 的大作中提到: 】
: 谢谢楼上二位!
: 那再请问,它和单纯的传递指针参数,有什么区别或优势吗?
: 谢谢!
不用创建临时变量;
改变引用的值会改变原调用函数中的指针值,类似于二级指针的传递。
【 在 LeonTown 的大作中提到: 】
: 谢谢楼上二位!
: 那再请问,它和单纯的传递指针参数,有什么区别或优势吗?
: 谢谢!
那我刚才表达的可能没能让你完全理解
在形参列表里传个什么东西的引用,就表示把它本身传进去了
而没有引用的话,函数体里面的是参数的副本。
进一步理解这个问题,你可以用这两个关键词: 函数调用过程 堆栈
谷或百一下
#include<stdio.h>
#include<stdlib.h>
void fun1(char *pc);
void fun2(char *&pc);
int main()
{
char str[] = "abc";
char *pa = str;
printf("%c\n",*pa);
fun1(pa);
printf("%c\n",*pa);
fun2(pa);
printf("%c\n",*pa);
exit(0);
}
void fun1(char *pc)
{
pc ++;
}
void fun2(char *&pc)
{
pc ++;
}
你可以执行一下看一下结果
OK
谢谢大家的解释,
我也再分享一个例子,
其实这个例子可能更能说明一些问题。
#include "stdafx.h"
#include <iostream>
using namespace std;
void func(const char*& cp, const char* src)
{
cp = src;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char *cp = NULL;
char *ch = "abcdefg";
// cout << "before func" << endl << *cp << endl; //ERROR!
func(cp, ch);
cout << cp << endl;
system("pause");
return 0;
}
const紧挨着指针名就是指修饰这个指针,即指针本身是个常量;
const紧挨着类型名就是指指针所指向的是个常量。(注意:const int *p和
int const *p都可以,同个意思,不过通常都是用前者)。
【 在 LeonTown 的大作中提到: 】
: 大家解释一下上面的例子吧
: 对const修饰的字符指针,在这里结合 char*& 的应用
: 谢谢!