当我向函数传递字符串时,有时我使用
char *functionname(char *name[256])
有时我会不使用指针而直接使用它(例如:
char functionname(char name[256])
我的问题是,何时需要使用指针? 我经常编写没有指针的程序并且它可以正常工作,但有时会出现问题。
当我向函数传递字符串时,有时我使用
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语言中有关数组参数的更多细节。
void function(char* name)
不修改C字符串时,它只适用于这种情况?将其声明为const
是否有意义?对于大多数情况而言,您发送的指针也应该是const,因为您不会更改指针本身。 - Paulchar *functionname(char *string name[256])
是语法错误,而不是“传递指针数组”。 - M.Mfunctionname("this is a string")
,那么字符串将存储在哪里?
由于我们没有为要分配的空间指定长度,我们确定它不会覆盖任何内容吗? - user5730329char *functionname(char *string[256])
这里你声明了一个函数,它以256个指向char
的指针数组作为参数,并返回一个指向char的指针。然而在这里,
char functionname(char string[256])
您正在声明一个函数,该函数以256个char
的数组作为参数并返回一个char
。
换句话说,第一个函数接受一个字符串数组并返回一个字符串,而第二个函数接受一个字符串并返回一个字符。
数组是一个指针。它指向一系列“对象”的起始位置。
如果我们这样做:int arr[10];
,那么arr
是一个指向内存位置的指针,从该位置开始有十个整数。它们未初始化,但内存已分配。这与执行int *arr = new int[10];
完全相同。
printf("请输入5个字符串:\n");
for(i = 0; i < 5; i++)
gets(S[i]);
printf("\n输入的字符串为:\n");
for(i = 0; i < 5; i++)
puts(S[i]);
StringSort(S);
printf("\n按字符数排序后的字符串为:\n");
for(i = 0; i < 5; i++)
puts(S[i]);
}void StringSort(char S[5][30])
{
char pS[30];
int i, j;for(i = 0; i < 4; i++)
for(j = i + 1; j < 5; j++)
if(strlen(S[i]) > strlen(S[j]))
{
strcpy(pS, S[i]);
strcpy(S[i], S[j]);
strcpy(S[j], pS);
}
} - Zen Cicevicsizeof(arr)
对于数组和指针是不同的。而 new
是 C++ 中的语法,不是 C 语言中的。 - interjay