[英]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
的地址将保存在堆栈中并作为参数传递给函数。
因此,对函数内部变量的任何编辑都将编辑原始变量。 在这种情况下,由于您需要传递一个数组,您只需拥有此选项。
对于像int
, float
这样的标准类型,你可以区分它们:
void passByValue(int i);
void passByReference(int &i);
区别在于前者在调用函数时将值复制到堆栈中,而在后者中只传递值的引用(指针)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.