没有指针能否实现这个功能

stein42 2011-09-08 10:59:31
#include <stdio.h>

int main(int argc, char *argv[])
{
int foo;
int *p;

p = &foo;
*p = 123;

printf("%p\n", p);
printf("%d\n", *p);

return 0;
}

p有两重含义,p本身有一个值,p所指的对象有一个值。

这样,设定不同的p值,就能修改或访问不同的对象。

引用似乎做不到这一点。

那么,对于没有指针的语言,能否实现这个功能或模拟这个功能。
...全文
262 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
unituniverse2 2011-09-11
  • 打赏
  • 举报
回复
引用可以动态绑定的,只不过要做个trick:

foo(int & i)
{
// MDF here.
return;
}

...

int i1 = 0, i2 = 1;

...
foo(i1);
...
foo(i2);


stein42 2011-09-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 peige2008 的回复:]

有数组就行了`~
[/Quote]
你是说用数组分配一块内存区域,用下标来访问吗?
PG 2011-09-10
  • 打赏
  • 举报
回复
有数组就行了`~
等待升级 2011-09-10
  • 打赏
  • 举报
回复
vs2010?

好快啊
孤舟 2011-09-09
  • 打赏
  • 举报
回复
打个比方
int foo;
int &p1 = foo;
int * const p = &foo;
引用就相当于 const的指针 第2行和第3行在C++中意义完全一样 下面是它们的VS的汇编码
int foo;
int &p = foo;
004148AE lea eax,[foo]
004148B1 mov dword ptr [p],eax
int *p1 = &foo;
004148B4 lea eax,[foo]
004148B7 mov dword ptr [p1],eax
p = 3;
004148BA mov eax,dword ptr [p]
004148BD mov dword ptr [eax],3
*p1 = 4;
004148C3 mov eax,dword ptr [p1]
004148C6 mov dword ptr [eax],4
孤舟 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]
引用 2 楼 wjjjuniniho 的回复:

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2 ……
[/Quote]
引用能重复引用 我还是第1次听说 引用的意思其实就是别名 必须在声明时定义 后面不能修改以用的对象
stein42 2011-09-09
  • 打赏
  • 举报
回复
java的引用就没法通过一个变量去访问或修改另一个变量。

比较引用本身而不是比较引用的对象,这只是一个优化技巧吧。
worldy 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]
引用 2 楼 wjjjuniniho 的回复:

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2 ……
[/Quote]

引用其实还是指针,只是指针的另一种语法形式!
gold_water 2011-09-09
  • 打赏
  • 举报
回复
具体要看什么语言,每种语言都其特点;各有所长,根据需要使用之;否则就没有必要存在这么多开发语言和对应IDE了.
alweeq86 2011-09-09
  • 打赏
  • 举报
回复
int &p = foo1; //引用

p = foo2//赋值
2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yq_118 的回复:]
C++的引用只能引用一个变量,不能再去引用其它变量了。
这样就只有一重含义了。


Java的引用和和C++的不同。
也不具有指针那样的两重含义。
[/Quote]
JAVA 的引用其实有两层语义,在赋值或者判定相等的时候,使用引用本身的值,在调用成员函数的时候,使用它所引用的对象。
机智的呆呆 2011-09-08
  • 打赏
  • 举报
回复
可以啊
比如win32平台上任何语言可以调用WriteProcessMemory
来修改指定内存里的数据。
ColdMooon 2011-09-08
  • 打赏
  • 举报
回复
我用过VB,有个奇技淫巧就是捣鼓ByVal和ByRef,
该传值的传了引用就相当于取地址,该传引用的传了值就是间接访问.
也可以利用VB的SafeArray结构来折腾.
VB版有个家伙叫超级绿豆还写了个类出来.淫才啊.

wjjjuniniho 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]

引用 2 楼 wjjjuniniho 的回复:

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2……
[/Quote]

前面那句话收回,不过还有一点,你这里的引用的意思跟lz的意思不一致
因为对于c++的引用本身的改变相当于直接修改变量,而不是改变对于引用对象群的选择(或者说指向)
wjjjuniniho 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yq_118 的回复:]

引用 2 楼 wjjjuniniho 的回复:

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2……
[/Quote]

依你而言,如果我想让某个引用成为第二个变量的别名(虽然肯定是错的),那怎么表示?
wjjjuniniho 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]

引用 2 楼 wjjjuniniho 的回复:

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2……
[/Quote]

没用过,但是理论上讲不通
stein42 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wjjjuniniho 的回复:]

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2 = 1;
int &amp;p = foo……
[/Quote]

不是引用foo2,而是把foo2的值赋给p,也就是foo1。
stein42 2011-09-08
  • 打赏
  • 举报
回复
C++的引用只能引用一个变量,不能再去引用其它变量了。
这样就只有一重含义了。


Java的引用和和C++的不同。
也不具有指针那样的两重含义。
jackyjkchen 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wjjjuniniho 的回复:]

你确定你编译通的过?
p引用了foo1还能再引用foo2?

引用 1 楼 jackyjkchen 的回复:

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2 = 1;
int &amp;p = foo……
[/Quote]
当然可以,VS2010
wjjjuniniho 2011-09-08
  • 打赏
  • 举报
回复
你确定你编译通的过?
p引用了foo1还能再引用foo2?

[Quote=引用 1 楼 jackyjkchen 的回复:]

引用当然可以

你是不是这个意思
C/C++ code

#include <stdio.h>

int main(int argc, char *argv[])
{
int foo1 = 0, foo2 = 1;
int &p = foo1;
printf("%d\n", p);

p = foo2;
printf("%d\n", p);……
[/Quote]
加载更多回复(1)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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