当我将字符串传递给函数时,有时我会使用
char *functionname(char *name[256])
有时我在没有指针的情况下使用它(例如:
char functionname(char name[256])
我的问题是,我什么时候需要使用指针?我经常编写没有指针的程序并且它可以工作,但有时它不会。
将 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 中数组参数的更多详细信息,另请参阅此问题。
假设你打算写
char *functionname(char *string[256])
在这里,您声明了一个函数,该函数将一个包含 256 个指针的数组char
作为参数并返回一个指向 char 的指针。另一方面,在这里,
char functionname(char string[256])
您正在声明一个函数,该函数将 256 的数组char
作为参数并返回 a char
。
换句话说,第一个函数接受一个字符串数组并返回一个字符串,而第二个函数接受一个字符串并返回一个字符。
数组是一个指针。它指向一系列“对象”的开始。
如果我们这样做:ìnt arr[10];
,那么arr
是一个指向内存位置的指针,后面跟着十个整数。它们未初始化,但已分配内存。这和做的完全一样int *arr = new int[10];
。