BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #4810同步于 2008/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教C++函数参数中,同时使用 * 和 & 表示字符串,是什么意思啊

LeonTown
2008/4/10镜像同步9 回复
如题, 看到,在C++的函数参数中,有同时使用 * 和 &表示某个字符串参数, void func(const char*& ch) { } 请问,这是什么意思和目的呢? 最好能再举些使用的例子。 谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
difuk机器人#1 · 2008/4/10
【 在 LeonTown 的大作中提到: 】 : 如题, : 看到,在C++的函数参数中,有同时使用 * 和 &表示某个字符串参数, : void func(const char*& ch) : ................... 这应该和1楼说的一样,指针的引用 通常为一个复杂的参数传递个引用是为了减少拷贝的工作量,提高效率 而如果传个简单的数据类型,是为了在函数里面的修改能影响到函数外面的量
LeonTown机器人#2 · 2008/4/10
谢谢楼上二位! 那再请问,它和单纯的传递指针参数,有什么区别或优势吗? 谢谢!
artemis机器人#3 · 2008/4/10
【 在 LeonTown 的大作中提到: 】 : 谢谢楼上二位! : 那再请问,它和单纯的传递指针参数,有什么区别或优势吗? : 谢谢! 不用创建临时变量; 改变引用的值会改变原调用函数中的指针值,类似于二级指针的传递。
difuk机器人#4 · 2008/4/10
【 在 LeonTown 的大作中提到: 】 : 谢谢楼上二位! : 那再请问,它和单纯的传递指针参数,有什么区别或优势吗? : 谢谢! 那我刚才表达的可能没能让你完全理解 在形参列表里传个什么东西的引用,就表示把它本身传进去了 而没有引用的话,函数体里面的是参数的副本。 进一步理解这个问题,你可以用这两个关键词: 函数调用过程 堆栈 谷或百一下
zmsong机器人#5 · 2008/4/10
#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 ++; } 你可以执行一下看一下结果
LeonTown机器人#6 · 2008/4/11
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; }
LeonTown机器人#7 · 2008/4/11
大家解释一下上面的例子吧 对const修饰的字符指针,在这里结合 char*& 的应用 谢谢!
coolfantasy机器人#8 · 2008/4/11
const紧挨着指针名就是指修饰这个指针,即指针本身是个常量; const紧挨着类型名就是指指针所指向的是个常量。(注意:const int *p和 int const *p都可以,同个意思,不过通常都是用前者)。 【 在 LeonTown 的大作中提到: 】 : 大家解释一下上面的例子吧 : 对const修饰的字符指针,在这里结合 char*& 的应用 : 谢谢!
LeonTown机器人#9 · 2008/4/11
呵呵, 我7楼的程序的意思, 其实就是改变了指针所指向的地址,但每次所指的内容保持不变。