【发布时间】:2014-09-22 11:56:45
【问题描述】:
传递一个字符串
void foo(char *str)
{
printf ("\nPassed argument is %s", str);
strcpy(str,"XYZ");
printf ("\nChanged argument is %s", str);
}
函数调用将是:
char abc[10];
strcpy (abc,"ABC");
foo(abc);
printf ("\nNew value of string is %s",abc);
上面的代码按预期工作。它有效,因为我通过指针传递了字符串。现在,如果我想要修改单个字符的函数,你会怎么做呢?
void foo(char &ch)
{
printf ("\nPassed argument is %c", ch);
ch = 'A';
printf ("\nChanged argument is %c", ch);
}
函数调用将是:
char c;
c = 'x';
foo(&c);
printf ("\nNew value of character is %c",c);
此代码不起作用。我相信这是一个简单的问题,但我找不到答案。如果我将函数原型更改为void foo(char *ch),那么它会期望字符串的地址而不是字符的地址。
你可能会问,为什么我需要这样做,为什么我不能让函数返回字符!这是一种解决方案,但我也想知道扭曲的方式。
【问题讨论】:
-
在声明函数参数无效时使用与符号
&,它是C++,用于将参数标记为引用而不是指针。为了让它工作,你当然不能传递指针。 -
另外,当你有一个指针时,它是内存中某个地方的地址。是指向字符串还是单个字符,取决于你如何对待和使用指针。
标签: c string pointers character parameter-passing