b/w char* str[]、char* str和char str[]的区别
Difference b/w char* str[],char *str and char str[]
b/w:
function(char* str )
function(char* str[] )
function(char str[] )
,它们是如何命名的(由哪种类型的string
/char[]
)?
function(char* STR)
函数接受一个指向char的指针,你可以像下面这样调用它:
char arr[10];
function(arr); // here arr is actually a char[] type,but it decays to char*
内部函数你不知道arr长度
,function(char* 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
and function(char str[])
这是一个以char[]类型作为STR参数的函数,您可以这样使用它:
char aa[12] = { "asd" };
function(aa);
我看不出function(char* str)和function(char str[])有什么大的区别。编译器甚至不允许你用这样的参数重载函数:
void function (char str[]); // compiler sees it as char* str
void function (char* str);
生成errror。
另一方面,函数(char* str[])是完全不同的,因为您有一个char指针数组而不是字符数组
function (char *str)与function (char str[])相同,都是接受char数组作为参数的函数。Function (char *str[])是一个接受char数组类型的数组作为形参的函数。
这些函数可以使用指针调用例子:
function (char *str[])Char **x ....函数(x);
char *s是指向char的指针
char s[]是一个数组
char *s[]是指向char的指针数组。
但是当它们被用作函数参数时,
char *s and char s[]
和
char *s[] and char **s
的处理方式与
相同。表示以下内容:
int foo(char s[] , char *s[]){
/* code */
}
等于:
int foo(char *s, char **s){
/* code */
}
在函数参数声明的上下文中,f( T a[] )
和f( T *a )
的含义完全相同;a
被声明为指向T
的指针。f( T *a[] )
声明a
为指向T
的指针。
这是B语言(C语言的派生语言)的继承,其中a[]
将a
声明为指针。
对于一个常规的对象声明,T a[]
将a
声明为一个未知大小的数组;声明是不完整的,并且a
在定义了大小之前不能使用。