关于memset()

用memset()将一个数组初始化为0,其中0的功能与向数组填入NULL或'\0'是不是一样的?数组是不是必须初始化?... 用memset()将一个数组初始化为0,其中0的功能与向数组填入NULL或'\0'是不是一样的?
数组是不是必须初始化?
展开
 我来答
Jonas_July
2006-05-24 · TA获得超过639个赞
知道答主
回答量:136
采纳率:0%
帮助的人:187万
展开全部
如果以这样的方式声明数组
int a[256]={0};
则数组内全部数字自动初始化为0,即一开始数组内所有元素的值为0

如果这样声明
int a[256];
则数组没有初始化,则开始时数组内的数字可以是任意值。

注意不是楼上所说,memset是对每个字节赋值,而int有4字节(32位)
比如这样,memset(a,1,sizeof(a));
则a中的每个元素都被赋值成为2进制数为,00000001000000010000000100000001,的数
转换成10进制就是16843009
所以,一般用memset对数组赋0或-1,赋其他的值就要用循环来实现。

关于NULL,\0:
stdio.h中有这句:
#define NULL 0
NULL在编译时都转换为0了;
\0是ascll码中编号为0的那个字符,也就是(int)(\0)==0;
若非轻寒
2006-05-24 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:146万
展开全部
这个问题要从理解memset()的用法来说:
------------------
函数名: memset
功 能: 设置s中的所有字节为ch, s数组的大小由n给定
用 法: void *memset(void *s, char ch, unsigned n);
程序例:

#include <string.h>
#include <stdio.h>
#include <mem.h>

int main(void)
{
char buffer[] = "Hello world\n";

printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) - 1);
printf("Buffer after memset: %s\n", buffer);
return 0;
}
注意它的用法,不一定是赋为0,其实就是把一个数组的每个单元写上ch,说明了就是写上一个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松语梦DI
2006-05-24 · TA获得超过306个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:396万
展开全部
memset初始化为0
与用循环逐个给数祖赋植为0是一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8398a5a53
2006-05-24 · TA获得超过7657个赞
知道小有建树答主
回答量:966
采纳率:0%
帮助的人:343万
展开全部
不一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式