b/w char* str[]、char* str和char str[]的区别

Difference b/w char* str[],char *str and char str[]

本文关键字:char str 区别      更新时间:2023-10-16

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在定义了大小之前不能使用。