phpstudy启动环境:关于memset()

来源:百度文库 编辑:中科新闻网 时间:2024/05/08 04:17:46
用memset()将一个数组初始化为0,其中0的功能与向数组填入NULL或'\0'是不是一样的?
数组是不是必须初始化?

如果以这样的方式声明数组
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;

这个问题要从理解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,说明了就是写上一个数

memset初始化为0
与用循环逐个给数祖赋植为0是一样的

不一样的