》Aray:<br> 你自己调试一下,一步步执行程序,观察一下变量嘛。我没得时间帮你调试,猜测着说几句。<br><br>耶,好像AAA过程贴掉了。<br><br>PChar 相当于 char *,如果你对C熟悉,这个问题你就明白了。我用汇编来讲,希望你懂:)<br><br>首先,过程B对A和AA的调用部分翻译为汇编<br> push ch ;压入堆栈的ch的地址,数组第一个元素的地址<br> call A<br>.................<br> push ch<br> call AA<br><br>过程A的语句pch:='aaa';翻译的汇编语句大概是:<br> const1 db 'aaa'<br> mov pch,const1<br>(pch和const1实际上都是堆栈里面的空间,真实的机器代码是[bp+nnnn])<br><br>过程AA的语句pch[0]:='a';翻译的汇编语句大概是:<br> mov bx,pch<br> mov [bx+0],'a'<br><br>可以看出,在过程A中,在语句pch:='aaa'执行以后,过程A里面pch的值肯定是'aaa'了,<br>因为指针指向了新的地址,但是这个新的地址没有返回給调用过程B的ch,也不可能返回<br>(因为数组是指针常量),所以主过程里面ch的值并没有改变,因为ch(实际上是地址)<br>存储空间的内容没有改变。<br><br>在过程AA中,在语句pch[0]:='a'执行以后,调用它的过程B里面的ch的值也没有改变,<br>当然还是不可能改变,因为是常量,但是过程AA通过pch对ch地址的应用,改变了指针<br>pch指向的内存的内容,也就改变了过程B的常量指针ch指向的内存的内容。