c++中:
char arry[ ]="hello world";在栈上分配一个局部数组。
char *ptr =“hello world”;在全局空间分配一个全局数组。
二者异同:
(i)“hello world!”都是占用13个字节(其中最后一个为空字符结束标志);
(ii) ptr是一个char *类型的变量,占用4个字节;arry是一个char[13]类型的变量,占用13个字节;
(iii)cout<< ptr<<endl; 输出hello world!
cout<<*ptr<<endl;输出h;
cout<<arry<<endl;输出hello world!
cout<<*arry<<endl;输出h;
(iv)数组形参,不能以值传递的方式传递数组,可以写成类似数组的形式
void print(const int *);
void print(const int [ ]);
void print(const int [10]);//维度表示期待的元素个数,实际不一定;
即:数组作为参数传递个函数时传递的是指针而不是数组,传递的是数组的首地址。
(v)分配内存空间不同
ptr是分配一个全局数组,全局数组是全局变量,对应内存中的全局区域,保存在普通数据段(静态存储区);
arry是分配一个局部数组,局部数组是局部变量,对应的是内存中的栈。
网友评论