//偶然看到一个题,然后就大胆试了一试,然后这一试好像试出了问题
//compiler:GCC
#include<iostream>
#include<typeinfo>
#include<stdio.h>
using namespace std;
void func(int n)
{
int arr[n]; //如果在这里初始化int arr[n]={0},编译报错,换成下面赋值就相安无事了
for(int i=0;i<n;++i)
arr[i]=i;
//output
for(int i=0;i<n;++i)
cout<<arr[i];
}
int main()
{
func(7); //输出0123456
cout<<endl;
//上面的n是通过参数传递的,
//那么主函数里面试试,这次数组大小直接反正声明处
int n=10;
//同样,在这里初始化数组会提示:变大小的数组不能初始化?!!还有变大小的数组!!?
//variable-sized object 'arr' may not be initialized.
int arr[n];
//write in data
for(int i=0;i<n;++i)
arr[i]=i;
//output
for(int i=0;i<n;++i)
cout<<arr[i]; //输出0123456789
//好吧,感觉至此三观尽毁
//然而,如果用typeid去识别arr[n]的类型,编译错误
//cout<<typeid(arr).name()<<endl;
//但是这样是可以的,输出A10_i,可以识别。
//说明int n=10,arr[n]和int a[10],二者并不是同一类型
int a[10];
cout<<typeid(a).name()<<endl;
}
私以为:
数组的声明,大小必须是确定的,比如int arr[10],或者大小是可以从初始化值推出的,比如 char charr="12345"。正是因为数组的这个局限性,才有了动态内存分配的个东西。但是,上面的运行情况让我就搞不懂了,数组的大小都可以是个变量,那还要动态内存分配何用??这倒还省去了手动释放的麻烦。那么new,delete是要丢掉饭碗了吗??
也或者.......也或者是我上面什么地方犯了低级错误??!!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.