源代码:
------------------------------------------------------------------------
<html>
<title>变量值设置</title>
<body>
<?php
$A = 10 ;                    // $A的值为10
$B = $A ;              // $A的值复制给$B
$C = &$A ;                   // $A的内存位置给$C
echo "执行计算前 <br>";
echo "A=$A <br>" ;
echo "B=$B <br>";
echo "C=$C <p>";
$B=$B+10 ;                   // $B的值加10
$C=$C+20 ;                   // $C的值加20
echo "执行计算后:<br>" ;
echo "A=$A <br>";  // 显示$A,$B,$C的值
echo "B=$B <br>" ;
echo "C=$C ";
?>
</body>
</html>---------------------------------------------------------------------------------
运行结果:执行计算前 
A=10 
B=10 
C=10 
执行计算后:
A=30 
B=20 
C=30 想来想去也想不明白,为什么变量A的值在执行计算后会发生变化的
$C = &$A ;  把变量A的内存在址赋给C了,但是A本身的地址没变,值也没改变,为什么会由原来的10变了30,取出来的是C的值呢?

解决方案 »

  1.   

    $C=&$A 表示$C和$A指向同一个内存变量
      

  2.   

    1楼正解。
    你把$C看成$A就可以了,对$C进行操作的话,相当于对$A进行操作(大部分情况下,像unset()的话就比较特殊了)。
      

  3.   

    $C=&$A 表示$C和$A指向同一个内存变量谢谢两位同志,本来我有学过C的,一直继承了C的思想$C = &$A ;                  // $A的内存位置给$C 给“$A的内存位置给$C ” 弄死了
      

  4.   

    $C=&$A 表示$C和$A指向同一个内存变量 
    那么$C和$A是指向$A原来的位置还是指向$C原来的位置呢?
    还是将两个合并到一个位置了?
      

  5.   

    $c=&$a
    你都说了是把A的地址赋给C了,说明他们指向同一个地址,无所谓谁的,是共同的,
    就好比一个抽屉有两把钥匙,A一把,C一把,你用C把锁开了,里面又放了20,A的打开了自然也就是30 
      

  6.   

    对于php来说
    $A = "10";
    $C = $A;
    $C = &$A;
    在变量未修改值得情况下都是表示$C和$A同时指向一个zval,zval结构体里有refcount表示引用次数,is_ref表示变量修改时是否和zval体分离,php也就是利用is_ref区分传值与传引用的情况了。
    详细的见解就去laruence的blog看看,这位牛人对底层颇有研究。
    http://www.laruence.com/2008/09/19/520.html
      

  7.   

    兄弟,学学C语言里面的指针吧,其实变量A和C中存的都是一个指向一个地址的指针而已
      

  8.   

    恩 关键问题在于$C=&$A 表示$C和$A指向同一个内存变量 
    这样在看的话就不会不明白了!
    楼上说的很对!