用指针进行换水操作
本帖最后由 汤姆叔叔的小屋 于 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;
} int t
t = *a;
*a = *b;
*b = t; void swap(int*a,int*b)
{
int t=*a;
*a=*b;
*b=t;
} chxchxkkk 发表于 2020-5-23 10:37
int t
t = *a;
*a = *b;
能解释理由吗? 汤姆叔叔的小屋 发表于 2020-5-23 10:41
能解释理由吗?
传址参数 void swap(int*a,int*b){
int*t=a;
*a=*b;
*b=*t;
} {:10_249:} 本帖最后由 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
|----------|----------| |----------|----------| |----------|----------|
| | | | | | | | |
|----------|----------| |----------|----------| |----------|----------|
>>>我的想法是改变指针变量所储存地址,来达到数值交换
采用双重指针试一试?
#include <stdio.h>
#include <windows.h>
void swap(int ** pa,int ** pb);
int main(void)
{
int a=2, b=8, *p, *q;
p=&a;
q=&b;
if(a<b)
{
//让p指向大的值
swap(&p,&q);
}
printf("%d > %d",*p,*q);
system("pause");
return 0;
}
void swap(int ** pa,int ** pb)
{
int *t;
t = *pa;
*pa = *pb;
*pb = t;
}
java2python 发表于 2020-5-24 13:01
为了保持格式,加了很多点,参数传递进去的总是内容,只不过这个内容是只想别的单元的指针
虽然我的水平完全不能让我看懂,但你认真回答的样子很帅。
页:
[1]