题目
填空,使得程序输出指定结果
#include
using namespace std;
int main()
{
int * a[] = {
// 在此处补充你的代码
};
*a[2] = 123;
a[3][5] = 456;
if(! a[0] ) {
cout << * a[2] << "," << a[3][5];
}
return 0;
}
输出
123,456
代码实现
#include <iostream>
using namespace std;
int main()
{
int * a[] = {
0,0,new int,new int[6]
};
*a[2] = 123;
a[3][5] = 456;
if(! a[0] ) {
cout << * a[2] << "," << a[3][5];
}
return 0;
}
解题思路
这道题可以加深对指针数组定义和空间分配方式的理解。
我尝试这样给数组赋值,发现赋值失败,输出为空,也就是说目前指针还没有被分配空间
#include <iostream>
using namespace std;
int main()
{
int *a[6];
// a[0] = new int;
*a[0] = 1111;
cout <<a[0][0]<<endl;//输出为空
return 0;
}
而用new 给指针a[0]分配一个空间后就可以赋值并输出了
#include <iostream>
using namespace std;
int main()
{
int *a[6];
a[0] = new int;
*a[0] = 1111;
cout <<a[0][0]<<endl;//输出为1111
return 0;
}
我初始化时给a定义了6个指针,当我尝试给没有定义的指针分配空间时,失败了,输出为空
#include <iostream>
using namespace std;
int main()
{
int *a[6];
// a[0] = new int;
a[6] = new int;
*a[0] = 1111;
a[6][0] = 212;
cout <<a[6][0]<<endl;//输出为空
return 0;
}
当我给指针a[0]后续没有被分配空间的元素中赋值时,依然可以输出,明明只给指针a[0]分配了一个int空间,我猜想可能是指针指向的地址空间后续都没有被占用或者被我强行占用改成了212这个值
#include <iostream>
using namespace std;
int main()
{
int *a[6];
a[0] = new int;
*a[0] = 1111;
a[0][5] = 212;
cout <<a[0][5]<<endl;//输出为212
return 0;
}
上题中给a[3]指针分配了6个int型的空间,可以提交成功,而只给a[3]指针分配一个int的空间时,也可以提交成功,估计也是上述原因
#include <iostream>
using namespace std;
int main()
{
int * a[] = {
0,0,new int,new int //只分配一个int的空间
};
*a[2] = 123;
a[3][5] = 456;
if(! a[0] ) {
cout << * a[2] << "," << a[3][5];
}
return 0;
}