【发布时间】:2015-09-03 10:18:45
【问题描述】:
黑白有什么区别:
function(char* str )
function(char* str[] )
function(char str[] )
它们是如何被调用的(string/char[] 的类型)?
【问题讨论】:
-
谁告诉你SO是一个辅导服务?请告诉我们为什么 google 无法回答您的问题。
-
请用谷歌搜索此类问题
黑白有什么区别:
function(char* str )
function(char* str[] )
function(char str[] )
它们是如何被调用的(string/char[] 的类型)?
【问题讨论】:
函数(char* str)
函数采用指向 char 的指针,你可以这样称呼它:
char arr[10];
function(arr); // here arr is actually a char[] type,but it decays to char*
你不知道arr长度的函数内部
,函数(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);
我看不出函数(char* str)和函数(char str[])之间有什么巨大的区别。编译器甚至不允许您使用此类参数重载函数:
void function (char str[]); // compiler sees it as char* str
void function (char* str);
产生错误。
function(char* str[] ) 另一方面是完全不同的,因为你有 char 指针数组而不是 chars 数组
【讨论】:
f 确实更改了char[] - 更改字符串文字具有未定义的行为
char* sarr[] { "foo", "fai", "foo" }; char* 应该是const char*
function (char *str) 与 function (char str[]) 相同,都是以 char 数组为参数的函数。 function (char *str[]) 是一个以char数组为参数的函数。
可以使用指针调用这些函数 示例:
函数 (char *str[]) 字符 **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 在定义大小之前不能使用。
【讨论】: