将char指针指定给数组

Krr*_*Raj 5 c++ arrays pointers

 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();
   }`
Run Code Online (Sandbox Code Playgroud)

为什么我被允许传递一个char指针并在数组中接收它,但是不能直接将char指针指向array.据我所知,当我们将参数传递给一个函数时,赋值会隐式发生.所以为什么这种行为不同?

hac*_*cks 8

声明

void fun(char arr[]){  
Run Code Online (Sandbox Code Playgroud)

相当于

void fun(char *arr){  
Run Code Online (Sandbox Code Playgroud)

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

char arr2[] = ptr;  
Run Code Online (Sandbox Code Playgroud)

编译器不知道大小,ptr因为它是指向字符串文字的第一个字符的指针hello,因此编译器无法确定数组的大小arr2,它会抛出错误.您必须指定数组的大小.
只有初始化器才能省略字符数组的大小;

char arr2[] = "Hello World";   
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器根据arr2字符串的大小确定数组的大小Hello World.

  • 不.数组和指针是两个不同的东西.在某些情况下,数组名称不是指针,而是衰减到指向其第一个元素的指针.你可以通过一个例子来理解它,即数组名称不能是`=`运算符的左操作数,而指针可以. (3认同)