阅读:1911回复:12
请教: 关于&(引用)的问题
bool GetWord(char * thestring, char * word, int& wordOffset);
在上述函数的声明中,GetWord的前两个参数是字符串起始地址,第三个参数应如何理解: 整型变量?或者是整型变量地址?或者其它含义? 请高手指教. 在此先谢谢! |
|
沙发#
发布于:2004-10-21 12:28
是一个地址符
int abc = 0; void add(int &dest) { ++ dest; } 如果这样调用 printf("%d", abc);//abc = 0 add( abc ); printf("%d", abc);//abc = 1 |
|
板凳#
发布于:2004-10-21 13:45
我知道可以这样调用.
我尝试了GetWord函数的另外一种声明方法, bool GetWord(char * , char * , int); 结果编译可以通过,但运行结果相差太远. 这两种声明差别何在? |
|
地板#
发布于:2004-10-21 13:55
呵呵,以为举个例子就可以了
& 实际上是按地址传送变量,几乎接近于指针,函数在调用时直接使用外部传入变量地址,所以在使用前最好进行检测 int *p = (int)&wordoffet; if (NULL == p) return FALSE; 不带 & 的只理解为变量的拷贝,函数在调用时再次创建一个 int 类型的临时寄存器最为变量拷贝容器,使用这个容器不会影响外部 |
|
地下室#
发布于:2004-10-21 14:43
谢谢xx_focus,我刚才反复试验了你所说的例子.即使把abc放在main()之外声明为全局变量,把add函数改为
void add(int abc) { ++ abc; } 然后在main()中调用add(abc),结果还是不能影响abc的值. 好像只有用引用这一条路,是吗? |
|
5楼#
发布于:2004-10-21 18:47
int abc;
void add(int abc) { ++ abc;//这个是针对哪个变量的呢?我想即使编译通过,这个程序也是错误的!! } //=========================== 那么这样呢? void add(int a) { ++ a;//显然只操作了一个外部变量的拷贝,没有把这个结果返回出去,所以也是无意义的 } 下面几种方法都是可以的 void add(int *a) { (*a) ++;//or ++ (*a) } void add(int &a) { a ++; //or ++ a } int add(int a) { a ++;//or ++ a return a; } |
|
6楼#
发布于:2004-10-21 22:06
总算把这个简单的问题搞清楚了.
|
|
7楼#
发布于:2004-10-21 22:17
指针和引用其实没什么区别,只不过是编译器玩的把戏.
|
|
|
8楼#
发布于:2004-10-23 22:38
c/c++是单向传递的。所以你想
void add(int abc) { ++ abc; }来改变abc得值怎么可能呀。你函数里边的add函数里边的abc和全局变量的abc是两回事么。 其实指针和引用没有什么本质的区别。就是引用方便点而已。当你要操作变量的值的话。不用*pointer了。直接用引用就行了。具体的底层实现我想也跟指针差不多把。让编译器多干点活就行了。 :P |
|
9楼#
发布于:2004-10-25 21:43
beineyes的回答很有道理.只是现在无法放分了.
|
|
10楼#
发布于:2004-12-31 17:02
引用的本质还是转化为指针操作.
int abc; void add(int abc) { ++ abc; } 在函数里面,abc是当局部变量使用,非全局变量. |
|
11楼#
发布于:2005-01-06 11:37
& 实际上是按地址传送变量,几乎接近于指针,函数在调用时直接使用外部传入变量地址,所以在使用前最好进行检测
int *p = (int)&wordoffet; if (NULL == p) return FALSE; 这个说法其实是错误的,引用和地址运算符其实是两回事,只有在C++中才有引用。如果是在C++中,这里&是引用符,引用符的意义就是给原来的变量取一个别名,没有取址的意义!修改别名的值就是修改原变量的值,所以以上表达式的if是永远不会成立的。可以参考C how to program中引用的使用. |
|
12楼#
发布于:2005-01-13 12:30
下载C++ primer
好好看看,比在这里问强 |
|