int buf1[] = {0,0,0,0,0};
int* buf2 = new int[5]; //assume every element is initialzed to 0 as well
我能想到的唯一区别是buf1是对数组的引用,而buf2是指向该数组的指针。换句话说,buf1始终引用数组,而buf2也可以指向其他位置。
除了上面提到的那一种,声明(和初始化数组)的两种方式之间还有其他区别吗?
最佳答案
buf1
是一个自动对象(如果在全局范围内,则为静态对象); *buf2
是一个动态对象。也就是说,buf1
的生存期是自动控制的,而*buf2
的生存期则由您来管理。 (buf2
一直存在,直到您说出delete[] buf2;
之类的东西为止。)
初始值设定项也不同。 buf1
是大括号初始化的,而*buf2
是默认初始化的(即,其int
元素未初始化)。