差异b / w char * str [],char * str和char str []

时间:2015-09-03 10:18:46

标签: c++ c pointers char

b / w有什么区别:

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

它们是如何被调用的(string / char[]的类型是什么?)

4 个答案:

答案 0 :(得分:0)

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

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

function(char * str []) char ** x .... function(x);

答案 1 :(得分:0)

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 */
}

答案 2 :(得分:0)

  

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
  

和函数(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);

生成错误。

另一方面,

function(char * str [])是完全不同的,因为你有char指针数组而不是字符数组

答案 3 :(得分:0)

在函数参数声明的上下文中,f( T a[] )f( T *a )表示完全相同的事物; a被声明为指向T的指针。 f( T *a[] )a声明为指向T的指针。

这是B编程语言(从中派生出C语言)的延续,其中a[]a声明为指针。

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