将char指针赋值给数组

Assigning char pointer to array

本文关键字:数组 赋值 指针 char      更新时间:2023-10-16
 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指针分配给数组?据我所知,当我们向函数传递参数时,赋值是隐式发生的。那么为什么会有这种行为上的差异呢?

声明

void fun(char arr[]){  

等价于

void fun(char *arr){  

这意味着,在这种情况下,不需要将字符数组的大小传递给函数。现在arrptr指向相同的位置。但是如果

char arr2[] = ptr;  

编译器不知道ptr的大小,因为它是指向字符串文字hello的第一个字符的指针,因此编译器无法确定数组arr2的大小,并抛出错误。你必须指定数组的大小。
字符数组的大小只能通过以下初始化式省略:

char arr2[] = "Hello World";   

在本例中,编译器根据字符串Hello World的大小确定数组arr2的大小。