=>
p = &p = &p[0]
&p , 可视作一个忽略[0]语法标示的缩写.
swap(&p, &q)=>
swap(&p[0], &q[0])
=>
1 <=> 5
基本上变量宣告後, 其位址不可变更. 此功能应采用额外的指针变量, 进行交换操作.
这个地方会出现不好理解的东西。调用函数的时候,你放入了int
a
int
b
但是这其实不是你的main函数中的a
b只是相当于他们的副本,也就是复制了一个a
和b
传入函数
所以你改变的只是传入的副本
也就是复制的副本a
b所以在main函数中打印的ab不会出现变化
依然是a=3,b=6
现在回答第二个问题,怎么会让ab的值变化:传入指针,也就是在main函数中使用a
b的指针,然后吧指针传入到函数里面
这个时候ab就会真正的发生变化,因为指针指向的是ab的物理地址,也就是真正的ab,不是副本,这个时候就会改变ab的值。想要理解,可以去百度传值参数和引用参数。纯手打,望采纳
图一输出“3,4”,图二输出“B,A”。C语言采用“值传递”:当形参是普通变量(整型、浮型和字符型)时,实参的数值赋给形参,接着形参在其函数发生变化(就没有实参的事了),跳回主函数形参销毁而实参保持现状;当形参是指针变量(整型、浮型和字符型的指针变量)时,传参时应该传地址(实参是地址),接着通过访问实参地址修改相应空间,实参地址的空间发生改变,实参的数值发生改变。