将字符串传递给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];