首页 > 试题广场 >

下面C++程序的输出是什么?

[单选题]
下面C++程序的输出是_________。
void f(char * x)
{
    x++;
    *x='a';
}
int main()
{
    char str [sizeof("hello")];
    strcpy(str, "hello");
    f(str);
    cout<<str;
    return 0;
}

  • hello
  • hallo
  • allo
  • 以上都不是
答案:B
f函数的作用是替换掉字符串第二个字符为‘a’
由于函数是值传递,所以传递进去的指针x改变了不影响外部的str指针,str指针还是从字符串开头开始的。因此输出 hallo
编辑于 2021-08-19 15:51:06 回复(9)

str是一个指针,f(str)是地址传递,可以改变地址所指向内容的值,但是地址str本身没有改变,若想要改变地址str的值,需要传二级指针(&str)

发表于 2018-10-09 14:15:17 回复(0)
注意,指针虽然传进去了,里面的值相应的会发生改变,但是这里的指针相当于函数的值传递,所以不改变原指针的指向。
发表于 2016-05-20 17:08:42 回复(4)
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;  void f(char *x) {
    printf("指针地址%d\n", x);
    x++;
    *x='a';
    printf("指针地址%d\n", x);
}
int main() {
    char str [sizeof("hello")];
    strcpy(str, "hello");
    printf("数组地址%d\n", str);
    f(str);
    printf("数组地址%d\n", str);
    cout << str;
    return 0;
}

注意这里传进去的参数是字符数组的地址,在f()函数里面对字符数组进行修改操作,所以字符变成hallo.
回到main函数,str指针的值并没有发生改变,还是指向字符h。所以输出hallo

编辑于 2016-08-01 20:18:39 回复(1)
咱们可以讨论一下如何通过指针修改其指向的字符串
发表于 2017-03-30 13:32:48 回复(0)
       指针虽然传进去了,里面的值相应的会发生改变,但是这里的指针相当于函数的值传递,所以不改变原指针的指向。要想改变指针的指向,得用指针的指针。
发表于 2018-12-05 19:32:47 回复(0)
       指针虽然传进去了,里面的值相应的会发生改变,但是这里的指针相当于函数的值传递,所以不改变原指针的指向。要想改变指针的指向,得用指针的指针。
编辑于 2017-05-09 19:42:06 回复(0)
验证之前 以为是C
验证结果为: B
发表于 2014-12-15 16:20:20 回复(0)
sizeof()返回了字符串大小,因为字符串最后默认都有一位'\0',所以sizeof("hello")=6,确保可以存放下hello,指针传递的是地址的值,修改地址所指向的值一定会修改成功
发表于 2020-08-06 11:07:13 回复(0)
传入的是str这个地址,把这个地址看成是一个值,相当于值传递。如果要改变,str指向的地址,需要改变&str的值
发表于 2020-04-28 21:35:01 回复(0)
答案选B,f(str)传的是地址,在f()函数中*x='a',改变了char数组中的元素将'e'变成了‘a’,但由于x是局部变量,f()函数返回时释放,其str指向的还是str的首地址,因此输出为hallo
发表于 2018-06-16 20:48:39 回复(0)

上面的代码和这个是一样的效果
void f(char  x[])
{
    x++;
    *x='a';
}
int main()
{
    char str [sizeof("hello")];
    strcpy(str, "hello");
    f(str);
    cout<<str;
    //cout<<str<<" "<<&str;
    return 0;
}
这样就很好理解,传递的是一个字符数组,只是把字符数组里面的内容改变了
发表于 2024-02-22 13:28:32 回复(1)
str是一个指针,f(str)是地址传递,可以改变地址所指向内容的值,但是地址str本身没有改变,若想要改变地址str的值,需要传二级指针(&str)
发表于 2023-10-20 20:54:31 回复(0)
这里个人挺赞同牛号:huixieqingchun。这里应该是按值传递,要想改变则需要传二级指针。
发表于 2023-08-13 12:10:22 回复(0)
这里f函数中的x相当于一个新的指针,不过指针x指向的内存和str指向的内存是同一块,因为x和str是两个不一样的指针,所以在函数f中修改x不会影响到外面的str,但是会影响到str所指向的内存块中的内容(因为str和x指向的是同一块内存)
发表于 2021-12-24 12:44:30 回复(0)
cout<
发表于 2020-08-17 10:52:49 回复(0)

函数内的局部自动变量,在函数返回后,内存才会被释放,这里的X不是f函数的变量

发表于 2018-06-02 23:02:49 回复(0)
函数是值传递,这里的值对应 (指针),所以传递进去的指针X改变不了影响外部的str指针
发表于 2018-05-11 14:42:49 回复(0)
答案错了吧,应该选hello吧
发表于 2018-03-26 09:18:12 回复(1)
指针传递
发表于 2018-03-24 19:58:14 回复(0)