数组初始化的问题?

walterzh 2004-07-29 11:45:28
char a[5]="\0"和memset(a, '\0', sizeof(a))效果是不是一样。
换言之:
在用char a[5]="\0"定义完以后,a的内存区域里的值是怎么样的。
是5个'\0'
还是a[0]是'\0',后面是未初始化的内存。
为什么?
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shanewest1 2004-07-29
  • 打赏
  • 举报
回复
up
RookieStar 2004-07-29
  • 打赏
  • 举报
回复
我记得这个知识点是我在一开始学老谭的那本书的时候就学到的
对数组的初始化,若数组是局部变量,则未给出的初值自动赋为0(条件是未给出的初值只能靠近数组尾端,不能夹在两个已给初值之间)
eg: int a[5]={1,2,3};
a[0]=1 a[1]=2 a[2]=3 a[3]=0 a[4]=0

所以char a[5]="\0";
这个初始化就相当于char a[5]={'\0'},又因为'\0' <=> 0
故五个数组元素都是'\0';

如果对'\0'是否等价于0有疑问,试试看这个:
#include <iostream>
using namespace std;

int main()
{
char c='\0';
int i=0;
cout<<(c==i)<<endl;
return 0;
}
fireinsky 2004-07-29
  • 打赏
  • 举报
回复
晕,'\0'就是0.
walterzh 2004-07-29
  • 打赏
  • 举报
回复
EternalBlue()和njSeeWhy(北海鲲鹏)说的是
在VC下和AIX下的C编译器都是5个'\0'
\0和0是不一样的
是为什么?
njSeeWhy 2004-07-29
  • 打赏
  • 举报
回复
我在VC6下调试,char a[5]="\0"的结果是5个'\0',不知道 peter9606(裴裴)(学习C/C++,但也要生活)和plusKid(const char* name) 两位是在什么环境下测试的
EternalBlue 2004-07-29
  • 打赏
  • 举报
回复
是5个'\0'
njSeeWhy 2004-07-29
  • 打赏
  • 举报
回复
C++中定义数组时可以按顺序指定每个元素的初始化值,没有指定的用0填充,所以就你这个例子来说,char a[5]="\0"和memset(a,'\0', sizeof(a))效果是一样的。再比如:
int a[5]={1};
结果是:a[0]=1 a[1]=a[2]=a[3]=a[4]=0
plusKid 2004-07-29
  • 打赏
  • 举报
回复
另外,我记得0是等于'\0'的,而不是空格。
plusKid 2004-07-29
  • 打赏
  • 举报
回复
如果是
char a[5] = {0};
的话,就是五个零,如果是楼主说的那样的话,就是a[0]='\0';
peter9606 2004-07-29
  • 打赏
  • 举报
回复
char a[5]="\0" ;

之后 a[0] = '\0' ;其他的都是随机值

char a[5]={'\0'} ;

之后 a[1] = 0 ; a[2] = 0 ; a[3] = 0 ; a[4] = 0 ;也就是空格

memset(a,'\0',sizeof(a)) ;

之后 a[0]= '\0' ;a[1] = '\0' ; a[2] = '\0' ; a[3] = '\0' ; a[4] = '\0' ;
peter9606 2004-07-29
  • 打赏
  • 举报
回复
char a[5]="\0" ;

之后 a[0] = '\0' ;其他的都是随机值
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这句话错了 其它值也都是0

char a[5]={'\0'} ;

两个效果一样

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧