从零开始学嵌入式 Day1,数组
引言
由于最近真的很想碰一下嵌入式,很久没有碰C了,跟着课程走了一下基础,就从数组开始,更细致的学习了一下C的东西,感觉确实跟之前粗浅认识的C有所不同,就浅浅记一下笔记。
一、数组
终端编译使用
gcc main.c -o -app
gcc编译、-app编译成app格式
数组特点
(1)内存连续
(2)类型相同
定义方式
存储类型 数据类型 数组名[元素个数];
存储类型
auto(自动,可以不写)、static(静态)
Static
修饰局部变量
可以延长局部变量的生命周期。
int main(){
for(i<5){
if(i<3){
int num = 5;
num++;
}
printf("%d",num);
printf("***************************");
}
}
当不加入static时,num会每次重新赋值,所以每次打印的值为6
当加入static时
static int num = 5;
此时转变为静态变量,在程序区域内会一直维持之前的num值而不被赋值,所以会6、7、8逐渐打印下来。
修饰全局变量和函数
表示隐藏,只能在本文件内使用,不能被外部调用。
当有main.c与func.c时,在main内想要调用func的一个变量,可以利用extern,
int
测试题
输入Username与password,登陆页面:
1.首先要获得字符串,要新建一个UserName与PassWord数组
#define SIZE 20 //定义宏,方便操作
char UserName[SIZE] = {'\0'};//'\0'是初始化必要的操作
char PassWord[SIZE] = {'\0'};
tip:需要理解三种0:0;'0';'\0':0 为 0 ;'0'为字符0,值为48;'\0'值为0
2.扫描输入,打印输出
(1)scanf输入值的问题,输入存放地址问题:
首先理解代码:
int a;//初始定义
scanf("%d",&a); //需要加入,因为是需要改变的
printf("a = %d\n",a) //不需要加取地址符
scanf与printf基本上可以分为一类
32位系统内,8个16进制字符表示地址
数组名即可代表地址,所以scanf在把东西传入数组的时候,直接输入数组名就行了
scanf("%s",UserName); //或者利用gets(UserName);
printf("%s\n",PassWord); //或者利用puts(PassWord);
但是gets会被明令禁止:因为gets没有脑子,一定会把输入读满
但是还有个fgets,输入man fgets查询,fgets会比较的聪明
man fgets;
fgets永远会少读一个,留一个位置留给\0,剩余补0为了防止溢出
从man中可以查询到,gets的参数很少,fgets参数比它多的多
char *gets(char *s);
char *fgets(char *s, int size, FILE *stream)
聪明在size,可以限制大小,同时fgets可以读取文件
(2)对等判断:
判断有很多选择:strcmp,strncmp都是比较两个字符串
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
int是因为比较时,如果不同,会利用ascii码进行相减,会给出一个差值
if(strcmp(UserName,"hqyj") == 0); //公司内需要避免逻辑错误,所以双等于很有可能出现问题,所以在判断时最好将常量写在左边
所以正确的写法为:
if(0 == strcmp(UserName,"hqyj"));
{
printf("OK\n");
}else{printf("error!\n");}