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元素未初始化)。

10-04 11:46