首页 > 试题广场 >

以下程序的打印结果是?

[单选题]
以下程序的打印结果是():
#include<iostream>
using namespace std;

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

void swap_str(char*a , char*b)
{
    char*temp = a;
    a = b;
    b = temp;
}

int main(void)
{
    int a = 10;
    int b = 5;
    char*str_a = "hello world";
    char*str_b = "world hello";
    swap_int(a , b);.
    swap_str(str_a , str_b);
    printf("%d %d %s %s\n",a,b,str_a,str_b);

    return 0;
}



  • 10 5 hello world world hello
  • 10 5 world hello hello world
  • 5 10 hello world world hello
  • 5 10 world hello hello world
推荐
答案:选A
答案解析:
swap_int(a, b)将实参10,5传递给了形参,在被调用函数中交换了10和5,但是调用结束,函数释放变量,实参中并没有交换;
swap_str(str_a, str_b)将实参的地址传递给了形参,其实跟上面的类似,并没有改变实参str_a、str_b的指向,实参没有交换。
编辑于 2015-02-06 10:12:15 回复(0)
实现交换的代码

#include<iostream>
using namespace std;

void swap_int(int &a , int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

void swap_str(char **a , char **b)
{
    char *temp = *a;
    *a = *b;
    *b = temp;
}

int main(void)
{
    int a = 10;
    int b = 5;
    char *str_a = "hello world";
    char *str_b = "world hello";
    swap_int(a , b);
    swap_str(&str_a , &str_b);
    printf("%d %d %s %s\n",a,b,str_a,str_b);
	system("pause");
    return 0;
}

发表于 2015-10-15 09:46:31 回复(4)
swap_int传的是值的副本,在函数体内被修改了形参a、b,a、b的值确实交换了,但是它们是局部变量,不会影响主函数中的a、b。当函数swap_int生命周期结束时,a、b所在的栈也就被删除了。swap_str函数可以实现两个字符串的交换,因为它修改的是指针所指向地址中的值。
发表于 2015-05-06 15:45:08 回复(3)
wap_str(&str_a,&str_b),把指针的地址传进去,把该地址里的内容(即指针,也就是两个字符串的地址)互相交换才行。题目上只是把字符串的地址传进去了,在函数中形成了局部变量而已。
发表于 2015-04-07 09:45:18 回复(2)
交换指针需要指针的指针
发表于 2018-10-22 11:57:57 回复(1)
swap_int(inta , intb);swap_str(char*a , char*b)
函数参数必须是地址才可以交换,否则只交换形参变量,实参并未改变
发表于 2015-09-18 15:19:07 回复(0)
表示不懂………
发表于 2015-08-29 09:27:03 回复(0)
swap_int 和swap_str两个函数都只是对两个形参(两个函数定义的临时变量)的操作,函数运行结束后,临时变量会在栈空间中被清空,故函数定义的操作不会对原数据起作用。
发表于 2016-03-17 22:30:33 回复(0)
要达到交换str的目的,需要交换两个地址
要改为swap(char **str1, char **str2),并且传递的时候swap(&str_a, &str_b)
发表于 2015-09-28 22:48:17 回复(0)
str_a,str_b都是指向的常量区,所以他们的值不会改变
发表于 2016-07-10 08:59:24 回复(0)
void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
该写法也可以
发表于 2018-07-15 23:12:05 回复(0)
发表于 2020-08-26 11:51:58 回复(1)
传进swap_str()后,相当于*a = str1的地址, *b = str2的地址,交换a,b相当于交换了str1和str2的地址的地址,但并没有该边str1和str2地址指向
0x1(a) --> 1(*a) --> H 0x2(b) --> 2(*b) --> W H和W表示str1和str2, 1和2表示str1和str2的地址,传入体中函数,*a = 1,*b = 2,交换a和b,相当于交换了0x1和0x2,1和2的指向并没有变,故体中交换不成功。
0x1(a) --> 1(*a) --> H(**a)  0x2(b) --> 2(*b) --> W(**b),若交换*a和*b,相当于交换了1和2,故交换成功。
发表于 2019-12-27 21:19:49 回复(0)
第二个函数,虽然传递的是指针,但是函数内部改变时,只是改变了指针的名字,没有改变指针内部的值。当函数调用结束后,实参不会发生变化。
发表于 2016-05-23 20:47:00 回复(0)
交换整型数据,传递指针,交换字符串,其本身就用指针表示字符串,所以要传递指针的指针,这样才能真正改变对应的值。
发表于 2015-10-14 10:15:01 回复(0)
因为只是交换了a和b的指向,和main函数中的str_a、str_b没关系,也就是说str_a、str_b指向没变
发表于 2015-08-29 15:17:03 回复(0)
求解:
         为什么调用swap_str(char *,char*)后,实参的地址调用前后并没有发生改变?
发表于 2015-08-18 15:40:56 回复(0)
swap_str中,并没有改变原地址上的数据,在函数内交换指针地址,并不影响原来指针的指向
发表于 2019-04-21 15:16:55 回复(0)
!指针指向字符串 修改得是指针的指向哈
不是这个串本身 原理还是一样得
发表于 2023-04-19 22:52:23 回复(0)
swap_str只是传了str_a和str_b的值,传参的时候创建了str_a 和 str_b 的副本,假设是str_a' 和 str_b',在函数内进行值的交换后,函数退出后,temp、str_a'、str_b' 销毁,回到main中,str_a 和 str_b 的依然指向原来的字符串。
发表于 2022-09-27 11:29:50 回复(0)
swap_ptr没有解引用,交换的是指针变量而不是指针指向的对象
发表于 2022-07-14 01:05:19 回复(0)