我看到别人写的c函数的参数,有的是传入引用,有的是传入指针,有什么不同,能否互换?

wd_6532 2003-12-28 04:09:34
unsigned int WINAPI EXPORT a(unsigned char * IP,unsigned int &Port)
上面的参数,能不能都是引用或者都是指针???
...全文
92 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zming 2003-12-28
  • 打赏
  • 举报
回复
broadoceans朋友,指针是C实现按访问传送的变通方式。
broadoceans 2003-12-28
  • 打赏
  • 举报
回复
to : zming()
c语言中绝对没有按访问传送(即引用)
引用是C++中引入的。
wd_6532 2003-12-28
  • 打赏
  • 举报
回复
传引用是传地址的方式。
”传指针是传值的方式“,因为是把地址的值拷贝过去了。
是不是这样?我从其它地方看到的。和zming的有点不同。

我想知道的是为什么在传参数的时候引用和指针混用,声明一下我刚使用c.
kingcom_xu 2003-12-28
  • 打赏
  • 举报
回复
LittleLee说的没错,而且,既然叫"别名",那么它就一定存在着正身,也就是说,你不能这样使用引用:
int a;

----------------------------------------------------
int& ri;//错误,引用类型必须初始化,否则会被编译器喀嚓
ri=a;
----------------------------------------------------
int& ri=a;//正确,声明并初始化


从而不会出现无效的引用.
wd_6532 2003-12-28
  • 打赏
  • 举报
回复
还是不明白阿。
那为什么好多接口的参数都是引用和指针混用的?
LittleLee 2003-12-28
  • 打赏
  • 举报
回复
引用就是“别名”,就好象你的小名一样,叫你的小名,叫的还是你,对象没有变;而指针本身也需要占内存,它的内容是指向对象的地址!
zming 2003-12-28
  • 打赏
  • 举报
回复
注:楼上有的解释有误

(1)传值调用是需进行内存拷贝的,而传指针是不需要进行内存拷贝的。
(2)字符串同样可以有&的形式,只是不太易用,如:

a(char &ip[15], int &port);

在调用时,定义

char ip[15]; int port;
a(ip, port);
kingcom_xu 2003-12-28
  • 打赏
  • 举报
回复
对了,引用是C++里引入的.
zming 2003-12-28
  • 打赏
  • 举报
回复
在调用函数时,参数的传递通常有三种方式:

按访问传送、按值传送、按值-结果传送。

C与Pascal实现两种:按访问传送(即引用)、按值传送。

按访问传送参数要求传入实参的地址(即通常所说的指针),这样,被调用函数与调用函数将共享某参数的内存空间。

通常所说的引用与指针是同义的,在C与Pascal的实现中,仅在函数内部对该参数的访问形式(书写风格)上有区别。

上例中,unsigned int &Port的含义为传入整型数Port的内存地址,在调用该函数时,需使用如下的书写方式:

a(..., port);

如果将其定义修改为 a(..., unsigned int *port),则在调用该函数时,需使用这种书写方式:

a(..., &port);

broadoceans 2003-12-28
  • 打赏
  • 举报
回复
其实它们只是编程的方式不同,实现机理差不多

unsigned char* ip要引用的话,包装成一个类就可以了。

我们经常看到 CString的引用类型,其实主要的还不是char*吗?

kingcom_xu 2003-12-28
  • 打赏
  • 举报
回复
我是这样理解的:

能用引用的情况下尽可能用引用,因为每一个引用都是强制指向一个存在的对象的,而指针就不是了.
broadoceans 2003-12-28
  • 打赏
  • 举报
回复
两者是不同的,如果不改源代码的情况下不可以互换
指针是传值调用方式,传的是变量的地址值。这样可以改变对象所指的内容
达到修改原程序中变量的值的目的。
引用是传址调用方式,可以通过直接修改形式参数变量本身达到修改原程序中
变量的目的。
jruv 2003-12-28
  • 打赏
  • 举报
回复
就上面的声明来说,可以都是指针(函数里面要作修改),但不能都是引用(ip是字符串,你引用什么?)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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