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 两个的值得转换 传入的是地址
// 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
在函数void swap(int *a, int *b)中,表示地址的是a和b,而不是*a,*b
*a表示地址a对应的值。temp=*a表示把地址a对应的值赋给temp 人造人 发表于 2021-2-25 19:19
传入的是地址
你好,我想问一下,main 函数里面调用 swap 函数的时候,传入的是 a b 的地址
那为什么 void swap(int *a, int *b) 这里传入的却变成了 a b 对应的值呢 洋洋痒 发表于 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 对应的值呢 Daniel_Zhang 发表于 2021-2-25 20:57
你好,我想问一下,main 函数里面调用 swap 函数的时候,传入的是 a b 的地址
那为什么 void swap(int ...
a是指针那么*a不就是取值了 int *a表示a是指针,表示的是地址
&b这俩整体表示地址
void swap(int *a, int *b)这里表示函数的两个参数都是指针,也就是地址,所以传进去的就是&a,&b
你把参数名字换一下再考虑考虑就懂了
函数定义时候的形参 int *a和你main函数里的a不是同一个a,形参的a表示一个指针,main函数里的a表示变量 // 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);
} 洋洋痒 发表于 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 的值 人造人 发表于 2021-2-25 19:19
传入的是地址
你好,很感激你的回复,但是楼下的对我的追问进行了追答,所以只能把最佳给他了。再一次很感谢你的回答{:10_275:}
页:
[1]