|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 汤姆叔叔的小屋 于 2020-5-23 10:48 编辑
用指针进行换水操作,我的想法是改变指针变量所储存地址,来达到数值交换。程序能运行,但答案错误。
正确答案我已经知道了,但我想知道具体的理由,谁解释清楚,正确答案就是谁的。
#include<stdio.h>
void swap(int*a,int*b);
int main()
{
int a=2, b=8, *p, *q;
p=&a;
q=&b;
if(a<b)
{
swap(p,q);
}
printf("%d > %d",*p,*q);
return 0;
}
void swap(int*a,int*b)
{
int*t;
t=a;
a=b;
b=t;
}
本帖最后由 java2python 于 2020-5-24 13:12 编辑
为了保持格式,加了很多点,参数传递进去的总是内容,只不过这个内容是只想别的单元的指针
- 实际内存中在swap中参与操作的加了#标记
- 程序内存
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff30..|.....2....| |0028ff30..|.....2....| |0028ff30.#|.....2....|
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff34..|.....8....| |0028ff34..|.....8....| |0028ff34.#|.....8....|
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff38..|0028ff30..| |0028ff38..|0028ff30..| |0028ff38..|0028ff30..|
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff3c..|0028ff34..| |0028ff3c..|0028ff34..| |0028ff3c..|0028ff34..|
- |----------|----------| |----------|----------| |----------|----------|
- swap(p,q) swap(a,b) swap(p,q)
- ..t=a;......................t=a;......................t=*a;
- ..a=b;......................a=b;......................*a=*b;
- ..b=t;......................b=t;......................*b=t;
- 实际交换的:
- ............参数a,参数b...............参数a,参数b...............参数a,参数b里所指向的内容
- 栈
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff20.#|0028ff30..| |0028ff20.#|.....2....| |0028ff20..|0028ff30..|参数a
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff24.#|0028ff34..| |0028ff24.#|.....8....| |0028ff24..|0028ff34..|参数b
- |----------|----------| |----------|----------| |----------|----------|
- |0028ff28.#|..........| |0028ff28.#|..........| |0028ff28 #|..........|变量t
- |----------|----------| |----------|----------| |----------|----------|
- | | | | | | | | |
- |----------|----------| |----------|----------| |----------|----------|
复制代码
|
|