将字符串传递给C中的函数-带指针还是不带指针?

将字符串传递给C中的函数-带指针还是不带指针?,c,string,function,C,String,Function,当我向函数传递字符串时,有时我使用 char *functionname(char *string name[256]) 有时我在没有指针的情况下使用它(例如: char functionname(char string[256]) 我的问题是,什么时候我需要使用指针?通常我写的程序没有指针,它可以工作,但有时不行。数组就是指针。它指向一系列“对象”的开始 如果我们这样做:nt arr[10];,那么arr是一个指向内存位置的指针,后面跟着十个整数。它们未初始化,但内存已分配。这与执行int

当我向函数传递字符串时,有时我使用

char *functionname(char *string name[256])
有时我在没有指针的情况下使用它(例如:

char functionname(char string[256])

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

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


如果我们这样做:
nt arr[10];
,那么
arr
是一个指向内存位置的指针,后面跟着十个整数。它们未初始化,但内存已分配。这与执行
int*arr=new int[10];
的操作完全相同,假设您打算写入

char *functionname(char *string[256])
在这里,您要声明一个函数,该函数将指向
char
的256个指针数组作为参数,并返回指向char的指针

char functionname(char string[256])
您正在声明一个函数,该函数将256个
char
s数组作为参数,并返回一个
char


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

将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中数组参数的更多详细信息,请参见。

您所说的“有时有效,有时无效”是什么意思朋友,你需要阅读基础教程。请不要让我们猜。展示你的代码。足以让我们理解问题。对于第一种选择,参数是256个字符串的数组。至少如果你修复了标识符错误(名称中没有空格)不,因为第一个例子是语法错误:有一个额外的标识符。#include#include void StringSort(char S[5][30]);void main(){char S[5][30];int i;printf(“Unesi 5 stringova:\n”);for(i=0;i<5;i++)get(S[i]);printf(i=0;i<5;i++)put(S[i]);StringSort(S);printf(“\nStringovi sortirani po broju znakova su:\n”);for(i=0;i<5;i++)put(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 strlen(S[i])>strlen S[j]){strcpy pS,S[i]);strcpy S[i],S[i];strcpy一个数组不是指针。例如,代码> SeZeof(ARR)< /C> >对于数组和指针是不同的。<代码>新< /Cord>是C++,不是C.@ INTJAY,抱歉。没有考虑到。你可以使用MalCurr(),包括Unesi,包括char *fn(char *s1,char *s2);int(),{ char a1(20),a2(20);PrINTF(“String String:”);;printf(“Unesi drugi string:”);get(a2);printf(“Prvi po abecednom redu je%s”,fn(a1,a2));}char*fn(char*s1,char*s2){if(strcmp(s1,s2)这两个程序都工作,但在一个程序中我没有使用指针,而在另一个程序中我使用了指针。如果函数以这种方式接收字符串,请查看链接是否有任何危害:char functionname(char string[256])
void function(char*name)
因此仅在它不修改C字符串时适用?声明它
const
是否有意义?对于大多数情况,您发送的指针也应该是const,因为您不会更改指针本身?
char*functionname(char*string name[256])
是一个语法错误,而不是“传递一个指针数组”。字符串实际存储在哪里?如果我们只做
functionname(“这是一个字符串”)
字符串将存储在哪里?我们是否确定它不会覆盖任何内容,因为我们没有为要分配的空间指定长度。