C++怎么让一个数组是空的?

 我来答
kaixingui2012
推荐于2019-09-10 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6485万
展开全部

C++中定义一个数组,没有绝对空的概念。

因为,定义数组后,系统就会给数组分配内存空间,该空间可能以前被其它程序使用过,其中留有原来写入的数据(对于本程序来说,就是垃圾数据),也可能没有被使用过,其内存数据值为0.

如果想在定义数组后,将数组内容清为0,则可以采用以下三种方法:

  • 初始化为0

int arr[10]={0}; //该语句置第一个元素为0,其余元素系统自动清为0.
  • 手工逐个元素置0

int arr[10]; //只定义,未初始化
for( int i=0;i<10;i++ ) //采用循环遍历数组,逐位赋值为0
    a[i]=0;
  • 采用memset()函数置数组元素为0

#include <string.h> //memset()函数头文件
int arr[10]; //只定义,未初始化
memset( arr, 0, sizeof(arr) ); //memset函数,将从arr开始的sizeof(arr)个字节置为0
百度网友1cb1bd5e
2018-05-28 · TA获得超过743个赞
知道答主
回答量:0
采纳率:100%
帮助的人:0
展开全部

初始化方法1

char  szFileName[MAXN]  = {0}          

/**其结果相当于memset(szFileName,0,sizoef(szFileName));

*即对字符串数组中的每个数据都初始化为(ASCII)0 即 "\0" 

**/

初始化方法2

char szFileName[MAXN] = "\0"          //即在刚开始的位置中加了一个结束符

在C/C++中结构体中使用空数组在一定使用环境下很有好处。
例如:

typedef struct _NET_DATA3
{

INT32 iLength;

BYTE byType;

BYTE byReserved;

WORD wStreamId;

DWORD dwChannelId;

DWORD dwParam;

DWORD dwParam1;

BYTE pData[]; //空数组, 必须放在结构体最后面,否则编译错误。
} NET_DATA3;

unsigned char buf[256];

NET_DATA3 *pNetData = (NET_DATA3)buf;

此时空数组pData就表示buf中sizeof(NET_DATA3)位置后一个的地址,也就是有一块有效的内存了。

发现sizeof(NET_DATA3) 等于20, 也就是说pData空数组在结构体中不占空间。

注意:在设计结构体或类时,空数组后面不允许有其他成员变量。


如: Class AA  
{
NET_DATA3 m_pdata[];

int m_ref; //此时因为NET_DATA3三中有空数组,而产生编译错误。

//空数组后面是不确定的长度,所以不能够在有其他成员变量。
}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0b10a0a
2018-03-07 · TA获得超过4532个赞
知道小有建树答主
回答量:10
采纳率:0%
帮助的人:1550
展开全部

c++不能定义空数组,数组是在栈上分配的;


一个长度为0的数组称之为“空数组”,空数组是一个真正的对象,只是包含元素个数为0。

null数组是一个空引用。


假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对放回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法在没有结果时通常返回空数组,而不是null,这样处理比较方便。


空数组即下标为0的数组,如a[0]。在函数中声明空数组是没有任何意义的,当然也编译不过。而在类或结构体中,是可以这样声明的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式