C++ 与char*str[],char*str和char-str[]的区别

C++ 与char*str[],char*str和char-str[]的区别,c++,c,pointers,char,C++,C,Pointers,Char,b/w的区别是什么: function(char* str ) function(char* str[] ) function(char str[] ) 哪种类型的字符串/char[]如何调用它们?函数char*str与函数char str[]相同,是以char数组为参数的函数。 函数char*str[]是一个以char数组的数组作为参数的函数 可以使用指针调用这些函数 例如: 函数char*str[] 字符**x。。。。 函数x char*s是指向char的指针 char s[]是一个数组

b/w的区别是什么:

function(char* str )
function(char* str[] )
function(char str[] )

哪种类型的字符串/char[]如何调用它们?

函数char*str与函数char str[]相同,是以char数组为参数的函数。 函数char*str[]是一个以char数组的数组作为参数的函数

可以使用指针调用这些函数 例如:

函数char*str[] 字符**x。。。。
函数x

char*s是指向char的指针

char s[]是一个数组

char*s[]是指向char的指针数组

但当它们被用作函数参数时

char *s and char s[]

他们的待遇是一样的

这意味着:

int foo(char s[] , char *s[]){
  /* code  */
}
char arr[10];
function(arr); // here arr is actually a char[] type,but it decays to char* 
同:

int foo(char *s, char **s){
/* code */
}
functionchar*str

函数获取指向char的指针,您可以如下调用它:

int foo(char s[] , char *s[]){
  /* code  */
}
char arr[10];
function(arr); // here arr is actually a char[] type,but it decays to char* 
在函数内部,您不知道arr长度

,functionchar*str[]

这是指向char的指针数组,您可以像这样使用它:

char arr1[] = "foo";
char arr2[] = "fai";
char arr3[] = "foo";
char* sarr[] { arr1, arr2, arr3 }; 
function(sarr); // here also no length of sarr is known inside function, you should pass is as second argument
char aa[12] = { "asd" };
function(aa);
和functionchar str[]

这是一个以char[]type作为str参数的函数,您可以像这样使用它:

char arr1[] = "foo";
char arr2[] = "fai";
char arr3[] = "foo";
char* sarr[] { arr1, arr2, arr3 }; 
function(sarr); // here also no length of sarr is known inside function, you should pass is as second argument
char aa[12] = { "asd" };
function(aa);

我看不出functionchar*str和functionchar str[]之间有什么巨大的区别。编译器甚至不允许您使用以下参数重载函数:

void function (char str[]); // compiler sees it as char* str
void function (char* str);
生成错误


另一方面,functionchar*str[]则完全不同,因为在函数参数声明的上下文中,您使用的是字符指针数组而不是字符数组,f T a[]和f T*a的意思完全相同;a被声明为指向T的指针。f T*a[]将a声明为指向T的指针

这是源于C的B编程语言的保留,其中a[]声明a为指针


对于常规对象声明,ta[]将a声明为大小未知的数组;声明不完整,在使用大小定义之前不能使用。

谁告诉过你这是教程服务?请让我们知道为什么谷歌不能回答你的问题。请谷歌这样的问题你确定它们是一样的吗?或者你的意思是他们被同等对待?我只是问问。最后一个例子不是最安全的。如果f确实更改了char[]-更改字符串文字具有未定义的behaviour@DavidHaimI觉得不错,这是一个数组初始化,可以在函数里面修改它。问题在于char*sarr[]{foo,fai,foo};char*应该是const char*我看不出有什么大区别。。。因为没有。它们是相同的功能。您完全可以连续编写这些声明,因为它们只是重新声明—您不能同时定义这两个声明。