【问题标题】:Using a subscript operator on a char pointer passed into a function doesn't modify the value. Why? [closed]在传递给函数的 char 指针上使用下标运算符不会修改值。为什么? [关闭]
【发布时间】:2011-10-19 05:39:31
【问题描述】:

我注意到以下函数:

void myFunction(char *myString)
{
   myString[0] = 'H';
}

实际上不会修改 myString。但是,这个函数可以:

void myFunction2 (char *myString)
{
   *myString = 'H';
}

我很清楚为什么 myFunction2 有效,但我不确定为什么 myFunction 无效。你能解释一下吗?

更新: 不用等。它工作正常。我很笨。我可以删除这个东西吗?

【问题讨论】:

  • 我也不知道为什么。你能展示一下你是如何偶然调用这些函数的吗?
  • 这两个函数是相同的,所以你不应该看到你所看到的。你如何测试这个?
  • 我不知道我在抽什么。刚试过这个,它的工作原理。 Errrr 无法删除问题...陷入尴尬的状态...
  • @CaseyPatton - 我已经决定“过于本地化”是一个可以接受的结束问题的理由,你可以投票结束自己,因为如果你觉得它没有帮助,这是你的问题。

标签: c++ dereference subscript


【解决方案1】:

不,我认为你对那个不正确。如果输入以下代码:

#include <iostream>

void fn1 (char *s) { *s = 'a'; }
void fn2 (char *s) { s[0] = 'a'; }

int main (void) {
    char str1[] = "hello";
    char str2[] = "goodbye";

    fn1 (str1); std::cout << str1 << std::endl;
    fn2 (str2); std::cout << str2 << std::endl;

    return 0;
}

你会发现这两个函数都可以很好地修改它们的数据,产生:

aello
aoodbye

所以,如果你真的看到了你所说的,除了我自己丰富的经验之外,我没有真正的理由怀疑你:-),问题出在其他地方。

在这种情况下,您需要向我们提供表现出错误行为的最小完整程序。

【讨论】:

  • 或通过 ref (p*&) 传递指针并解决问题
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 2021-04-03
  • 2021-09-07
  • 2018-09-03
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多