Daniel_Zhang 发表于 2021-2-25 19:05:37

c 或 c++ 语言两个数字互换位置

// c++
#include <iostream>

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

int main(void)
{
    int a = 3, b = 5;

    std::cout << "交换前"
            << " a = " << a << ", b = " << b << std::endl;

    swap(&a, &b);

    std::cout << "交换后"
            << " a = " << a << ", b = " << b << std::endl;
}

// c
#include <stdio.h>

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

int main(void)
{
    int a = 3, b = 5;

    printf("交换前, a = %d, b = %d\n", a, b);

    swap(&a, &b);

    printf("交换后, a = %d, b = %d\n", a, b);
}

代码如上,有 c 和 c++ 两个版本的,现有几个疑问,

1.
void swap(int *a, int *b) 函数里面传入的 *a 和 *b 是 a b 对应的值吗还是地址?

2.
如果 上面的问题是对的话,那么为什么 main 函数里面调用 swap 函数的时候,传递的却是 a b 的地址

3.
void swap(int *a, int *b) 里面进行的操作是不是 将 a 的地址给 temp, b 的地址给 a,temp 的地址 给 b 完成 a b 两个的值得转换

人造人 发表于 2021-2-25 19:19:44

传入的是地址

// c++
#include <iostream>

void swap(int *a, int *b)
{
    int temp = *a;
    std::cout << temp << std::endl;
    std::cout << a << std::endl;
    std::cout << *a << std::endl;

    *a = *b;
    *b = temp;
}

int main(void)
{
    int a = 3, b = 5;

    //std::cout << "交换前"
    //         << " a = " << a << ", b = " << b << std::endl;

    swap(&a, &b);

    //std::cout << "交换后"
    //          << " a = " << a << ", b = " << b << std::endl;
}


$ ./main.exe
3
0xffffcc3c
3

洋洋痒 发表于 2021-2-25 20:20:25

在函数void swap(int *a, int *b)中,表示地址的是a和b,而不是*a,*b
*a表示地址a对应的值。temp=*a表示把地址a对应的值赋给temp

Daniel_Zhang 发表于 2021-2-25 20:56:34

人造人 发表于 2021-2-25 19:19
传入的是地址

你好,我想问一下,main 函数里面调用 swap 函数的时候,传入的是 a b 的地址

那为什么 void swap(int *a, int *b) 这里传入的却变成了 a b 对应的值呢

Daniel_Zhang 发表于 2021-2-25 20:57:05

洋洋痒 发表于 2021-2-25 20:20
在函数void swap(int *a, int *b)中,表示地址的是a和b,而不是*a,*b
*a表示地址a对应的值。temp=*a表示 ...

你好,我想问一下,main 函数里面调用 swap 函数的时候,传入的是 a b 的地址

那为什么 void swap(int *a, int *b) 这里传入的却变成了 a b 对应的值呢

wp231957 发表于 2021-2-25 21:07:50

Daniel_Zhang 发表于 2021-2-25 20:57
你好,我想问一下,main 函数里面调用 swap 函数的时候,传入的是 a b 的地址

那为什么 void swap(int ...

a是指针那么*a不就是取值了

洋洋痒 发表于 2021-2-25 21:39:29

int *a表示a是指针,表示的是地址
&b这俩整体表示地址
void swap(int *a, int *b)这里表示函数的两个参数都是指针,也就是地址,所以传进去的就是&a,&b

你把参数名字换一下再考虑考虑就懂了
函数定义时候的形参 int *a和你main函数里的a不是同一个a,形参的a表示一个指针,main函数里的a表示变量

洋洋痒 发表于 2021-2-25 21:40:46

// c
#include <stdio.h>

void swap(int *p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

int main(void)
{
    int a = 3, b = 5;

    printf("交换前, a = %d, b = %d\n", a, b);

    swap(&a, &b);

    printf("交换后, a = %d, b = %d\n", a, b);
}

Daniel_Zhang 发表于 2021-2-25 21:59:36

洋洋痒 发表于 2021-2-25 21:39
int *a表示a是指针,表示的是地址
&b这俩整体表示地址
void swap(int *a, int *b)这里表示函数的两个参数 ...

哦哦哦,懂了懂了

也就是相当于 main 函数里面传入 变量的地址给 swap 方法

swap 相当于定义了 *p1 *p2 两个指针进行接收地址

int temp = *p1; 这里的 *p1 就是对 指针 p1 的解引用,然后把解引用获得的值赋值给 temp

*p1 = *p2 就是 指针 p2 进行解引用然后将获得的值赋值给 指针p1 的值

Daniel_Zhang 发表于 2021-2-25 22:01:29

人造人 发表于 2021-2-25 19:19
传入的是地址

你好,很感激你的回复,但是楼下的对我的追问进行了追答,所以只能把最佳给他了。再一次很感谢你的回答{:10_275:}
页: [1]
查看完整版本: c 或 c++ 语言两个数字互换位置