C++:请问在申请堆数组空间时不能初始化,因为数组元素的值是随机的是什么意思???
展开全部
在C++中是可以初始化的, 但是C中不可以.
int * ptr = new int[100](); // 注意最后的(), 所有元素都会被初始化为0
但是, 仅仅允许默认初始化, 也就是说以下是不合法的
int * ptr = new int[100](10); // 意图全部初始化为10, 但是C++不允许这样做.
如果数组元素的类型是类类型, 而且定义了缺省构造函数, 那么即使你没有加(), 它同样会被初始化.
std::string* sptr = new std::string[100]; // 100个string都会被正确的初始化, 而不是"随机数".
"在申请堆数组空间时不能初始化,因为数组元素的值是随机"
如上所述, 这句话前半句并不正确. 改成:
"对内置类型来说, 若没有显示的初始化, 其值是不确定的".
原因在于内存被释放, 或者程序结束时, 操作系统并不会把使用过的内存清0, 它的值会一直保留到下一次对这个地址的数据写入. 你获取的原始内存可能保留着之前被释放的值(甚至是上个程序留下的), 自然就不确定.
int * ptr = new int[100](); // 注意最后的(), 所有元素都会被初始化为0
但是, 仅仅允许默认初始化, 也就是说以下是不合法的
int * ptr = new int[100](10); // 意图全部初始化为10, 但是C++不允许这样做.
如果数组元素的类型是类类型, 而且定义了缺省构造函数, 那么即使你没有加(), 它同样会被初始化.
std::string* sptr = new std::string[100]; // 100个string都会被正确的初始化, 而不是"随机数".
"在申请堆数组空间时不能初始化,因为数组元素的值是随机"
如上所述, 这句话前半句并不正确. 改成:
"对内置类型来说, 若没有显示的初始化, 其值是不确定的".
原因在于内存被释放, 或者程序结束时, 操作系统并不会把使用过的内存清0, 它的值会一直保留到下一次对这个地址的数据写入. 你获取的原始内存可能保留着之前被释放的值(甚至是上个程序留下的), 自然就不确定.
展开全部
意思就是申请堆空间时,如果不给指针初始化得花,指针就成了一个野指针,随即的,要小心。
追问
你看错我问的问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么“不能初始化”,一般都要初始化啊。
追问
是“堆数组空间”啊
追答
堆就是在内存中另外存储空间的形式,它主要是在C/C++中用new或者malloc等空间分配的函数实现的。
管这么多干什么呢?
一般都要重新赋值,这个数组才有意义啊。
一般我是这么赋值的,没有好理解的,你也不要太纠结一些文字。
char array[100] = {0};
memset(arrary, '\0', sizeof(array));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询