繁体   English   中英

在C中将字符串作为参数传递

[英]Passing string as an argument in C

我有一个功能:

int getparam(char *gotstring)

我正在传递一个字符串参数,如char *sendstring = "benjamin"

而不是我可以使用的上述声明,

int getparam(char gotstring[])

问题:哪一个更好? 如果我必须使用int getparam(char gotstring[])那么我必须对现有函数做出的所有其他更改是什么?

int getparam(char gotstring[])int getparam(char* gotstring)是相同的。 就个人而言,我会推荐后一种语法,因为它更好地描述了实际发生的事情。 getparam函数只有一个指向字符串的指针 ; 它不了解实际的数组大小。 但是,这只是我的意见; 要么会奏效。

在这种情况下,它们意味着相同的事情,您不需要更改函数的其余部分。 但请注意,通常,数组和指针是不同的东西。

两者都不是更好,真的。 这是你更舒服的东西。 在惯用法中,更常见的是使用char * arg而不是char arg [](想想strcmp,strcpy等)。

接受字符串参数的最佳方法是

int getparam(const char *gotstring);

然后,您可以使用文字字符串调用它:

int main(void)
{
  int x = getparam("is this a parameter string?");
  return 0;
}

或者一个字符数组:

int main(void)
{
  char arg[] = "this might be a parameter string";
  int x = getparam(arg);
  return 0;
}

在参数指针上使用const指示调用者该参数在函数内是只读的,这是非常好的信息。

因为数组是通过C中的引用发送的

int getparam(char *gotstring)

int getparam(char gotstring[])

意思是一样的。 但首先使用的是更多。 所以使用它会让你成为一名优秀的C公民。

这称为通过引用传递以及名称如何表示它仅表示传递变量的引用 (在本例中为char* )。

两种解决方案都可以正常工作,实际发生的是,当void functionName(char* string) ,内存中第一个char的地址将保存在堆栈中并作为参数传递给函数。

因此,对函数内部变量的任何编辑都将编辑原始变量。 在这种情况下,由于您需要传递一个数组,您只需拥有此选项。

对于像intfloat这样的标准类型,你可以区分它们:

void passByValue(int i);
void passByReference(int &i);

区别在于前者在调用函数时将值复制到堆栈中,而在后者中只传递值的引用(指针)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM