两个语句的区别?

CALM 2001-09-16 07:08:13
void func(sometype *&s);
void func(sometype &*s)
这两个语句有区别么?谁能给个例子说明一下啊?
...全文
138 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwu 2001-09-17
  • 打赏
  • 举报
回复
int *pa=&a;
这里的&a是"取得a的地址", 不是引用.
netsdk 2001-09-17
  • 打赏
  • 举报
回复
引用并不仅仅是用来替换指针的功能,它在C++中的原义并不是想让程序员认为
它是指针的代替品,尽管在底层它是用指针的方式来实现。
但是我们应该注意到,指针可以为NULL,甚至可以指向一个非法地址,而这些
错误编译器根本就无法捕获,只有当程序运行时才可能觉察。比如下面的语句:
int *p=NULL;
*p=0;
编译器不会报错,但是运行时必然崩溃。
对于引用,我们应该从C++的语义上理解,而不应该从它的底层实现去看,引用
应该看作某个变量的别名。比如:
int a,&r=a;
r=0;
这里的引用r被看作a的别名,而不仅仅理解为取a的地址,引用只能引用一个已存在
的变量,而且申明一个引用的同时必须让它引用一个变量,所以不会出现象指针那样
指向非法地址的错误。比如:
int *p; //OK
int &r; //Fault,没有引用变量
int *&rp=p; //OK,rp是指针p的引用(或者别名)
int &*p=&r; //Fault,引用的指针,对引用取址毫无意义。
引用r只是一个别名,并不是真实的变量,编译器不会为r分配内存,对r取地址也就毫
无意义。
xiterator 2001-09-17
  • 打赏
  • 举报
回复
引用是一经初始化就不可改变其值的指针。void func(sometype& *s)意味着:若编译合法,则可通过s(得到了sometype&引用类型变量x的地址)可以修改x的值,这是与前述矛盾的。
clarelh 2001-09-16
  • 打赏
  • 举报
回复
gz up
CALM 2001-09-16
  • 打赏
  • 举报
回复
int *pa=&a;
*(pa)=1
不可以么?这不是也是指向引用的指针么?
tjm 2001-09-16
  • 打赏
  • 举报
回复
gz
CALM 2001-09-16
  • 打赏
  • 举报
回复
指向引用的指针为什么不合法呢?能解释一下么?
谢谢
xwu 2001-09-16
  • 打赏
  • 举报
回复
void func(sometype *&s);
参数为指针的引用. 如果你有一个C函数用双重指针做参数, 在C++里就可以用指针的引用来代替. 道理和用引用代替指针是一样的.

void func(sometype &*s);
指向引用的指针是不合法的.
maquanjun 2001-09-16
  • 打赏
  • 举报
回复
学习

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧