C++怎么让一个数组是空的?
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
初始化方法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三中有空数组,而产生编译错误。
//空数组后面是不确定的长度,所以不能够在有其他成员变量。
}
c++不能定义空数组,数组是在栈上分配的;
一个长度为0的数组称之为“空数组”,空数组是一个真正的对象,只是包含元素个数为0。
null数组是一个空引用。
假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对放回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法在没有结果时通常返回空数组,而不是null,这样处理比较方便。
空数组即下标为0的数组,如a[0]。在函数中声明空数组是没有任何意义的,当然也编译不过。而在类或结构体中,是可以这样声明的。