将字符串传递给C中的函数 – 有或没有指针?
当我将字符串传递给函数时,有时我会使用
char *functionname(char *string name[256])
有时我会在没有指针的情况下使用它(例如:
char functionname(char string[256])
我的问题是,我什么时候需要使用指针? 我经常在没有指针的情况下编写程序而且它有效,但有时却没有。
将C字符串传递给函数的公认惯例是使用指针:
void function(char* name)
当函数修改字符串时,您还应该传入长度:
void function(char* name, size_t name_length)
你的第一个例子:
char *functionname(char *string name[256])
将一个指针数组传递给字符串,这根本不是你需要的。
你的第二个例子:
char functionname(char string[256])
传递一系列字符。 这里数组的大小无关紧要,参数无论如何都会衰减到指针,所以这相当于:
char functionname(char *string)
有关C中数组参数的更多详细信息,另请参阅此问题 。
假设你打算写
char *functionname(char *string[256])
在这里,您声明一个函数,它将256个指针的数组作为参数获取char
并返回指向char的指针。 另一方面,在这里,
char functionname(char string[256])
您声明一个函数,它接受256个char
的数组作为参数并返回一个char
。
换句话说,第一个函数接受一个字符串数组并返回一个字符串,而第二个函数接受一个字符串并返回一个字符。
数组是一个指针。 它指向一系列“对象”的开始。
如果我们这样做: ìnt arr[10];
,然后arr
是一个指向内存位置的指针,其中有十个整数。 它们未初始化,但内存已分配。 它与执行int *arr = new int[10];
完全相同int *arr = new int[10];
。