laistery
11/18/2017 - 6:26 AM

串口初始化,memset

#include <stdio.h>

int main(void) {
	// your code goes here
	int a = 100;
	int aa[100];
	printf("%d",sizeof(a));
	printf("%d",sizeof(aa));
	return 0;
}
//输出的实际结果是
Success	#stdin #stdout 0s 9432KB
4
Success	#stdin #stdout 0s 9432KB
400
c 的关于数组初始化 和 memset 用法
今天为了彻底搞定一个关于 c 中数组初始化和声明不同情况下,比如只声明一个数组 char str[20]; 那么这 str 里面是什么内容呢?我用 vc6++,debug 下看到都是 - 56 饿 asc 码,后来请教了一个华为的大牛,他说 按照理论来说里面的内容都是有可能的,这和叫做 “脏内存” 或者叫做“野数组”。好了第一个问题搞懂了。

 

第二个问题 memset 的问题,之前在万臣解析 fast 协议的时候,因为是刚入门 C,薄荷老大给我说一般声明了数组吼都用 memset 一下。当时不是很理解,但是现在这句话知道了。

举例一下:

比如 char str[20];

对于 str 的连续 20 个单元都是随意的值

char str[20] = "Hello World!";

这个时候对于 str,前面的字符是 Hello World 紧接着是'/0';也就是说 str 尽管后面没用到的内存单元也是 0 了,不是随意值

 

如果 memset(str, 0, sizeof(str));

那么这句话也是把 str 的前 sizeof(str) 个单元都赋值给 0

如果是 memset(str, 1, 10)

那么这句话是把 str 的前 10 个单元都赋值给 1 了,其余的还是 随意值