汤姆叔叔的小屋 发表于 2020-5-23 10:34:33

用指针进行换水操作

本帖最后由 汤姆叔叔的小屋 于 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;
}

chxchxkkk 发表于 2020-5-23 10:37:13

int t
t = *a;
*a = *b;
*b = t;

永恒的蓝色梦想 发表于 2020-5-23 10:40:49

void swap(int*a,int*b)
{
      int t=*a;
      *a=*b;
      *b=t;
}

汤姆叔叔的小屋 发表于 2020-5-23 10:41:03

chxchxkkk 发表于 2020-5-23 10:37
int t
t = *a;
*a = *b;


能解释理由吗?

liuzhengyuan 发表于 2020-5-23 10:43:27

汤姆叔叔的小屋 发表于 2020-5-23 10:41
能解释理由吗?

传址参数

永恒的蓝色梦想 发表于 2020-5-23 10:45:23

void swap(int*a,int*b){
int*t=a;
*a=*b;
*b=*t;
}

Chui- 发表于 2020-5-23 11:20:59

{:10_249:}

java2python 发表于 2020-5-24 13:01:44

本帖最后由 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
|----------|----------|   |----------|----------|   |----------|----------|
|          |          |   |          |          |   |          |          |
|----------|----------|   |----------|----------|   |----------|----------|


java2python 发表于 2020-5-24 13:54:56

>>>我的想法是改变指针变量所储存地址,来达到数值交换
采用双重指针试一试?
#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;
}

汤姆叔叔的小屋 发表于 2020-6-3 17:20:37

java2python 发表于 2020-5-24 13:01
为了保持格式,加了很多点,参数传递进去的总是内容,只不过这个内容是只想别的单元的指针

虽然我的水平完全不能让我看懂,但你认真回答的样子很帅。
页: [1]
查看完整版本: 用指针进行换水操作