void fun(char arr[]){
cout<<arr;//successfully received and printed
}
main(){
char *ptr="hello";
fun(ptr);
/*
char arr2[]=ptr; throws error....initialiser fails to determine size of arr2
*/
getch();
}`
为什么我允许传递一个char指针并在数组中接收它,但是不能直接将char指针指向array。据我所知,当我们将参数传递给一个函数时,赋值会隐式发生。所以为什么这个区别行为?
答案 0 :(得分:8)
声明
void fun(char arr[]){
相当于
void fun(char *arr){
这意味着,在这种情况下,不需要将字符数组的大小传递给函数。现在arr
指向与ptr
相同的位置。但是在
char arr2[] = ptr;
编译器不知道ptr
的大小,因为它是指向字符串文字hello
的第一个字符的指针,因此编译器无法确定数组{{1}的大小它会抛出错误。您必须指定数组的大小
只有初始化器才能省略字符数组的大小;
arr2
在这种情况下,编译器根据字符串char arr2[] = "Hello World";
的大小确定数组arr2
的大小。