题目:
9.完成编程练习6,但使用new来动态分配数组,而不是声明一个包含3个元素的CandyBar数组。
答案:书上无答案。
C++技术网辅导详解解答:
代码参考:
#include <iostream>
struct CandyBar {
char brand[50];
double weight;
int calorie;
};
int main()
{
using namespace std;
CandyBar * pCB = new CandyBar[3];
memset(pCB, 0, sizeof(CandyBar) * 3);//注意初始化内存
pCB[0] = { "Mocha Munch1",2.3,300 };
pCB[1] = { "Mocha Munch",2.4,310 };
pCB[2] = { "Mocha Munch",2.5,320 };
for (int i = 0; i < 3; i++)
{
cout << "snack's brand:" << pCB[i].brand << endl;
cout << "snack's weight:" << pCB[i].weight << endl;
cout << "snack's calorie:" << pCB[i].calorie << endl << endl;
}
delete[] pCB;//一定要记得释放指针
return 0;
}
使用new来动态分配数组,而不是声明一个包含3个元素的CandyBar数组。也就是说,我们现在要用动态分配内存的形式替换此前静态声明数组的形式来完成程序。
那么使用动态分配数组,我们需要了解几点:动态分配内存、初始化内存、赋值、释放内存。
动态分配内存,C++使用new即可完成,在C中可以用malloc函数。初始化内存使用memset函数,为了防止申请的内存存有残余的信息,对现在的使用造成干扰。这是一个良好的习惯。赋值和数组赋值类似。千万要注意的是,动态分配的内存一定要自己释放。释放内存不仅不要漏掉,而且要在正确的地方正确的时机释放。所以直到用完了才释放。