社区
基础编程
帖子详情
谁给讲讲引用与指针的区别?
nowgoo
2005-12-06 01:15:59
有这么一道题:
$a = 1;
$b =& $a;
$b = $a++;
问,现在$a和$b各是多少?我想都没想就答了2,2
答案是1,1
手册上说,引用意味着用不同的名字访问同一个变量内容。我的疑问是,$a 把值1赋给 $b 以后再自增1,$b 应该也加1啊……谁给开导一下,谢了
...全文
153
11
打赏
收藏
谁给讲讲引用与指针的区别?
有这么一道题: $a = 1; $b =& $a; $b = $a++; 问,现在$a和$b各是多少?我想都没想就答了2,2 答案是1,1 手册上说,引用意味着用不同的名字访问同一个变量内容。我的疑问是,$a 把值1赋给 $b 以后再自增1,$b 应该也加1啊……谁给开导一下,谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jiayishuai
2005-12-06
打赏
举报
回复
今天算是明白了,以前也是较困惑阿
nowgoo
2005-12-06
打赏
举报
回复
assassin5616 大哥的解释似乎更有道理。解释执行 $b = $a++ 的时候,电脑做了这些事:
1. 把 $a 的值(为1)存到某个地方
2. $a 自增 1,值变为 2
3. 由于 $a 和 $b 指向同一个变量,所以 $b 的值也变成 2
4. 系统从某个地方把值取(为1)出来,赋给 $b,$b 值为 1
5. 由于 $a 和 $b 指向同一个变量,所以 $a 的值也变成 1
这么理解对不对?
leakey8
2005-12-06
打赏
举报
回复
楼主其实你的理解是没错的,在C++里结果是为2的,为什么PHP却为1呢,这个就要问PHP的开发者啦,也许楼上说的对"这个其实是php解释器的问题,它解释的时候执行顺序是首先保存$a的值,然后给$a加一,然后再把先前保存的$a的值赋给$b",但我更赞同 xuzuning(唠叨)的说法:"他并不符合“递增/递减运算符”的运算规则!"
xuzuning
2005-12-06
打赏
举报
回复
小哥哥,那不是我说的,是手册上说的。
assassin5616
2005-12-06
打赏
举报
回复
不太同意唠叨大哥的意见,$a++应该是先保存$a的值,然后再给$a加一,而不是你说的先返回值再加1。事实上c++的自增操作变成汇编代码后可以很明显的看到是先保存原来的值到寄存器,再把内存里的那个值加1。这也是为什么c++语言里++i要比i++快的原因,因为后者多了一个临时变量来保存值。
你的原话如下:
“$a++ 后加 返回 $a,然后将 $a 的值加一。”
assassin5616
2005-12-06
打赏
举报
回复
补充一下,这应该就是通行的自右及左的计算方式,应该主流的编译器和解释器都是这么干的
xuzuning
2005-12-06
打赏
举报
回复
呵呵,把这个东西由搬到这里来了!
手册上说,引用意味着用不同的名字访问同一个变量内容。
手册上还说,这并不像 C 的指针,替代的是,引用是符号表别名。
其实这并没有什么根本的区别。究竟是指向机器指令段的某个地址还是指向符号表的某一项,对于非汇编程序员来讲并不是很重要的。只要知道他真实的指向内存的某个位置就可以了
楼主的这个问题,其实应该是php的一个bug
递增/递减运算符
++$a 前加 $a 的值加一,然后返回 $a。
$a++ 后加 返回 $a,然后将 $a 的值加一。
--$a 前减 $a 的值减一, 然后返回 $a。
$a-- 后减 返回 $a,然后将 $a 的值减一。
于是有
$a = 1;
$b = $a++;
echo "a=$a b=$b";//out a=2 b=1
$a = 1;
$b =& $a;
$b = ++$a;
echo "a=$a b=$b"; //out a=2 b=2
$a = 1;
$b =& $a;
$b = $a;
$a++;
echo "a=$a b=$b"; //out a=2 b=2
这些符合规则与结果的表述
而一个例外
$a = 1;
$b =& $a;
$b = $a++;
echo "a=$a b=$b"; //out a=1 b=1
其结果显然是不符合规则的
其中$b = $a++;实际在做$a++; $b=1;的操作
尽管可以从运算符的优先级上讲的通,但是他并不符合“递增/递减运算符”的运算规则
于是可以说php的开发者们给我们开了一个小“玩笑”,。。。。
经测试在php4和php5的各个版本中都存在着这个“问题”
既然这种情况出现的可能性极小,在实际应用中回避就是了。或者干脆就不用“递增/递减运算符”
assassin5616
2005-12-06
打赏
举报
回复
这个其实是php解释器的问题,它解释的时候执行顺序是首先保存$a的值,然后给$a加一,然后再把先前保存的$a的值赋给$b。就造成了两个都是一了,至于为什么php要按这种执行顺序执行就没有深究过了。
引用和指针最大的区别就在于指针可以逆解析得到地址,而引用不可以,所以像java就全部是用的引用
nowgoo
2005-12-06
打赏
举报
回复
To moodboy1982: 我是说 C 中的指针
To eglic: 也就是说,$a 用完了之后不自加了?
moodboy1982
2005-12-06
打赏
举报
回复
PHP什么时候有指针了?
是是非非
2005-12-06
打赏
举报
回复
$b = $a++;
关键在这里
$b=++$a;这样就是你的答案2,2
$a++先返回$a的值1然后自加
$b是$a的引用,$b等于1了,$a自然也等于1
精通C语言
指针
指针
被誉为C语言的精髓、C本质上是加了一层语法糖的汇编,引进当时先进的函数,保留了汇编强大的地址直接访问功能 ——
指针
,使其高效灵活。本课程是黄强老师对于
指针
的一次专题讲解,相信能给大家带来收获!
c++
引用
与
指针
的
区别
一、从语法上来讲 1.
指针
是存储某个实例的地址,
引用
是实例的别名 2.程序为
指针
分配内存区域,而不为
引用
分配内存区域 3.
指针
使用时要加 “ * ”,解
引用
,
引用
可以直接使用 例: int main() { int a = 10; ...
C/C++
引用
和
指针
的
区别
为什么C/C++语言使用
指针
?...C++将
指针
暴露给了用户(程序员),而Java和C#等语言则将
指针
隐藏起来了。 “Everything uses pointers. C++ just exposes them rather than hiding them,” It's easier to gi...
指针
和
引用
的
区别
指针
和
引用
形式上很好
区别
,但是他们似乎有相同的功能,都能够直接
引用
对象,对其进行直接的操作。但是什么时候使用
指针
?什么时候使用
引用
呢?这两者很容易混淆,在此我详细介绍一下
指针
和
引用
,力争将最真实的一面...
C++中
引用
与
指针
的
区别
学过C的朋友应该都知道
指针
,刚...下面来
讲讲
什么是
引用
。 一、
引用
的定义
引用
是给另外一个变量起别名,所以
引用
不会分配内存空间。
引用
的声明方法:类型标识符 &
引用
名=目标变量名;(如int &ptr = num;) 二
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章