Linux C语言学习记录(Day2-Day4)

不断有前辈跟我推荐,学习技术要写博客。既可以巩固记忆,又能时时回顾,发现不足。今天尝试写下第一篇!

大一学过C语言,但是仅仅是会解一些很简单的问题,比鸡兔同笼,一元二次方程组这样的。学的很浅,在后面实际运用的时候往往一脸懵逼,不知如何下手,没有完成过一个比较完整的项目。现在深知嵌入式开发这条路C语言的重要性,索性重新来过,来自华清创客学院小美老师的教程,顺便把Linux也了解了解。学了9天,每一个例程都亲手写过,运行过。

下面是当时学习时用word做的简要记录,先从零散写起,希望后面的博客能有自己的体系目录,慢慢来吧!

Day 2

注意各个数据类型的长度与数值范围。

ASCII码表中,常用的符号要记熟。

字符串的结尾都是  ’\0’

输入长度要小于堆栈数。

define宏定义时最好都加括号,以免引起歧义。

变量存储模型:4种,占据存储空间的大小由其类型决定。变量在内存空间的首地址,称为变量的地址。

auto、register、static、extern

auto为局部变量,只能在某一个范围内去使用,函数体内或者复合语句内。

register为寄存器型,将变量放入寄存器中,加快程序运行速度。但是register速度快,数量少,一般申请不到,就使用普通内存。占用寄存器,也可能导致其他部分无法使用寄存器。且register变量必须是CPU能接受的类型,一般长度应小于等于整型的长度。寄存器中无地址而言,寄存器也就用不了指针

static静态存储类型变量,使变量一直存在,在内存中固定地址,不是以堆栈方式存放。只要程序没结束,在内存中就不会被销毁。下次再调用该函数,不用再次声明,且还保留上次的值

Extern变量,当变量在一个文件中的函数体外说明,则项目中所有其他文件中函数或程序段都可引用这个变量。(全局变量

extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。

要注意的是,Static修饰的全局变量,其他文件无法使用。

运算符:

两个float/double之间不能取余(a%b)。

使用非(!)的时候,后面条件一般加括号,提高先决条件优先级。如!(a<5)

i++先取值再运算,++i先运算后取值。

多个逻辑与时,从左至右依次判断,只要有0了结果就都是0。

多个逻辑或,只要有1结果都是1.

Day 3

位运算符:逐位运算,与或非,左移右移,异或(相异为真)

三目运算符

x>y ? x+2 : y+2

简略版的if-else结构

逗号运算符:从左到右执行,由最后一个表达式赋值给待赋值变量;

例如 y = (x++, y++, x+y)

sizeof(),以字节为单位,计算数据占据空间大小,只针对变量数据类型;

优先级:

最好加括号,以免专门判断优先级

格式输出:

附加格式符:

#include<stdio.h>



int main(int argc, char *argv[]){

int a = 234;

float f1 = 234.456;

char ch = 'a';

printf("%8d\n%2d\n",a,a);

printf("%9f-%9.2f-%.3f\n",f1,f1,f1);//%9f意思是保留9位小数,%9.2f表示保留2位小数,但是整个结果要占9位。

printf("ch = %5c\n",ch);

return 0;

}

对于字符串’Hello,World!’,%15s意思是输出15位字符,不够的用空格补齐;%15.5s是原字符串只保留5位字符,剩下的空格补齐;%2.5s保留字符串的5位,如大于2,就直接输出前5位。

带0和+的,用来补齐空位即可,注意+号要占用0的位置。

getchar()

 

 scanf中,用%4d%2d,则自动给输入的数值分段,分别赋值给多个变量。

字符型变量连续输入,不能加空格,因为空格也被认为是一个字符。

清理键盘输入整型后的换行符,空格等垃圾符号。以免影响后续输入。

用getchar();

scanf获取字符串,不能带空格,除非用循环来接收;

所以一般用gets(),以回车换行作为结束标志。

注意:puts();输出完会默认地自动换行。\n

Day 4

控制语句,先掌握知识性的语法,重点是后续运用练习,构建自己解决问题的写法。

if后只有一行时,可以不加{}。如果大于1行,则必须加{}。

写逻辑条件时注意比较符号写对,等于比较时最好把数字放前面。

vi命令行模式下,输入gg=G可以快速自动调整格式。

Switch后各个case的值必须不相同,当表达式的值和case后的常量表达式相等时,就执行case后的语句。break是当与case匹配并执行后跳出switch体。

如果都不加break,则匹配case后,也会执行后边case的所有语句。

default最好放最后,break就可省略。放前面的话也要加break。

几种分支执行同样语句时,可以共用,如下的分数评级程序。

枚举型enum,格式:

enum DAY{

      MON=1, TUE, WED, THU, FRI, SAT, SUN

};

注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

没有指定值的枚举元素,其值为前一元素加 1

在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。

用法:

enum DAY{

      MON=1, TUE, WED, THU, FRI, SAT, SUN};enum DAY day;

也可枚举和变量一起定义。

goto语句可能会打破流水线,影响效率。Goto也会大大提高程序结构清晰度,还可以把所有的函数出口集中到一处。

For循环:

第一步初始化赋值,第二步判断,为真后依次执行3,4.

Break只能跳一层循环;

用getchar把用户误输入的内容吃掉,清理输入缓冲区,然后用户才能重新输入。

数组:

里面的数据类型要相同。一维数组在计算机的内存中是连续存储的。

C语言对数组不作越界检查,靠程序员自己把控范围。

冒泡交换,n个数最多需要交换n-1轮,每一轮都是相邻两个数依次比较,每一次都把这一轮大的数移到最后。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值