28

当我将字符串传递给函数时,有时我会使用

char *functionname(char *name[256])

有时我在没有指针的情况下使用它(例如:

char functionname(char name[256])

我的问题是,我什么时候需要使用指针?我经常编写没有指针的程序并且它可以工作,但有时它不会。

4

3 回答 3

54

将 C 字符串传递给函数的公认约定是使用指针:

void function(char* name)

当函数修改字符串时,您还应该传入长度:

void function(char* name, size_t name_length)

你的第一个例子:

char *functionname(char *name[256])

传递一个指向字符串的指针数组,这根本不是你需要的。

你的第二个例子:

char functionname(char name[256])

传递一个字符数组。这里数组的大小无关紧要,参数无论如何都会衰减为指针,所以这相当于:

char functionname(char *name)

有关C 中数组参数的更多详细信息,另请参阅此问题。

于 2013-06-16T09:44:01.003 回答
2

假设你打算写

char *functionname(char *string[256])

在这里,您声明了一个函数,该函数将一个包含 256 个指针的数组char作为参数并返回一个指向 char 的指针。另一方面,在这里,

char functionname(char string[256])

您正在声明一个函数,该函数将 256 的数组char作为参数并返回 a char

换句话说,第一个函数接受一个字符串数组并返回一个字符串,而第二个函数接受一个字符串并返回一个字符。

于 2013-06-16T09:42:07.957 回答
0

数组是一个指针。它指向一系列“对象”的开始。

如果我们这样做:ìnt arr[10];,那么arr是一个指向内存位置的指针,后面跟着十个整数。它们未初始化,但已分配内存。这和做的完全一样int *arr = new int[10];

于 2013-06-16T09:37:21.930 回答