如题所 char a[100] = {'0'} 与 memset(a, 0, sizeof(a)) 什么区别?
欢迎选择我的课程,让我们一起见证您的进步~~
char a[100] = {'0'};
将a[0]初始化成'0',将后续元素值初始化,即初始化成0,即'这里有个杠0'。(杠不出来)如果是
a[0]
'0'
char a[100] = {'杠0'}; // 大雾
则第一个元素以'杠0'初始化,后续元素依然值初始化。
而
memset(a, 0, sizeof(a))
等价于
for (int i=0; i<sizeof(a); ++i) ((char *)a)[i] = 0;
虽然效果都是使数组a[]的内容置零了。但是两段代码用在完全不同的场合,不能互相替代:
a[]
char a[100] = {0}是对数组变量进行声明和初始化。在此之前a[]还不存在。
char a[100] = {0}
memset(a, 0, sizeof(a))是在前面已经声明a[]以后,对其内容进行清零操作。在此之前a[]已经存在了。
还有就是memset是个库函数,不是语言本身的能力。
memset
char a[100] = {'0'} 在编译时即可确定内容,而memset要到运行时才会将内容设置为指定值
一个是用字符0(0x30)去填充a 另一个是用0 而且C99似乎会自动添加'0' memset不会 它的意义是将某地址的某区域填充为指定的内容
char a[]得到的a可能在栈上, 可能是全局变量, 总之是存在的
char a[]
memset不导致分配, a可以在任何地方
a[100] = {0}; 可以视为方便编码的快速初始化变量内存的语法糖,仅在进入该作用域时执行一次,当然作用域可以重复进入就再次执行。memset是通用的设置memory的函数,任何时都可以调用。
char a[100] = {0} 是静态初始化为0,在程序运行前相应的内存即为0memset() 是动态初始化为0,程序运行时将相应的内存清零
将
a[0]
初始化成'0'
,将后续元素值初始化,即初始化成0,即'这里有个杠0'。(杠不出来)如果是
则第一个元素以'杠0'初始化,后续元素依然值初始化。
而
等价于
虽然效果都是使数组
a[]
的内容置零了。但是两段代码用在完全不同的场合,不能互相替代:char a[100] = {0}
是对数组变量进行声明和初始化。在此之前a[]
还不存在。memset(a, 0, sizeof(a))
是在前面已经声明a[]
以后,对其内容进行清零操作。在此之前a[]
已经存在了。还有就是
memset
是个库函数,不是语言本身的能力。char a[100] = {'0'} 在编译时即可确定内容,而memset要到运行时才会将内容设置为指定值
一个是用字符0(0x30)去填充a 另一个是用0 而且C99似乎会自动添加'0' memset不会 它的意义是将某地址的某区域填充为指定的内容
char a[]
得到的a可能在栈上, 可能是全局变量, 总之是存在的memset不导致分配, a可以在任何地方
a[100] = {0}; 可以视为方便编码的快速初始化变量内存的语法糖,仅在进入该作用域时执行一次,当然作用域可以重复进入就再次执行。
memset是通用的设置memory的函数,任何时都可以调用。
char a[100] = {0} 是静态初始化为0,在程序运行前相应的内存即为0
memset() 是动态初始化为0,程序运行时将相应的内存清零