C++ 与char*str[],char*str和char-str[]的区别
b/w的区别是什么: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[]是一个数组
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*我看不出有什么大区别。。。因为没有。它们是相同的功能。您完全可以连续编写这些声明,因为它们只是重新声明—您不能同时定义这两个声明。