近期工作上有对C语言算法上的需求,所以要学C,上学的时候没学过,只学过半年的Java(我是专升本,本科学的材料),2015年工作后也学过C,那时候的需求是能看懂就可以,也就没深入研究,用一周撸了一遍C基础,可以看懂了,现在要能自写出来,而且是算法相关的,两年过去了,一些细节更是早就忘光了,只能再深入学习一下了。最后说一句,每个人学东西都是从不会开始,除了班禅我从未听说有人生下来就会需要后天习得的技能,即便是动物也是通过游戏来习得捕猎的,所以说别怕晚,3个月你就可以入门了,而且除了相对论这种接近于哲学的难以理解的,我从来没觉得任何其他技能难学,人脑就像计算机里面的带宽一样是有其极限的,也就是说任何人发明出来的东西都是可以学会的(此处不包括深度学习训练得到的模型,理解模型需要的带宽有点高)
本文仅作为我自己学习时候的一个标记,或者回头复习一下看一下,不能作为他人的学习笔记,也不能用来系统的学习C语言。
本文内容参考:Linux C编程一站式学习http://akaedu.github.io/book/
c/c++ primer https://github.com/andycai/cprimer
#include <stdio.h>
int main(){
printf("Hello World\n");
return 0;
}
注释并不会被编译器所编译,/* */,不能嵌套,可以跨行
注释/* 注释*/
//注释,不能跨行
\‘ 单引号‘(Single Quote或Apostrophe)
\" 双引号"
\? 问号?(Question Mark)
\\ 反斜线\(Backslash)
\a 响铃(Alert或Bell)
\b 退格(Backspace)
\f 分页符(Form Feed)
\n 换行(Line Feed)
\r 回车(Carriage Return)
\t 水平制表符(Horizontal Tab)
\v 垂直制表符(Vertical Tab)
printf("character %c \n integer %d \n float %f ",‘}‘,3,3.14);
printf中的第一个字符串称为格式化字符串(Format String),它规定了后面几个常量以何种格式插入到这个字符串中,在格式化字符串中%号(Percent Sign)后面加上字母c、d、f分别表示字符型、整型和浮点型的转换说明(Conversion Specification),转换说明只在格式化字符串中占个位置,并不出现在最终的打印结果中,这种用法通常叫做占位符(Placeholder)
常用变量类型
char 字符型 ,int 整型,float 浮点型,double 双精度浮点型
char fred;
int bob;
float jimmy;
double tom;
上面的只是声明,如下是为变量赋值
fred = ‘c’;
也可以将声明和复制放在一行 如:int bob= 3;
我建议在声明时直接进行赋值,因为我在用c++写代码时,有时变量自己附初始值不是0 ,而是其他值。
表达式
*和/是同一优先级,+和-是同一优先级,*和/的优先级高于+和-。对于同一优先级的运算从左到右计算,如果不希望按默认的优先级计算则要加()括号(Parenthesis)。例如(3+4)*5/6应先算3+4,再算*5,再算/6。
各种语言中的运算符都是相同的,至少现在还没看到在运算符上使用不同规则的。
printf("%d hours and %d percent of an hour\n", hour, minute * 100 / 60);
printf("%d and %f hours\n", hour, minute / 60.0);
函数
#include <stdio.h>
void newline(void);
void threeline(void);
int main(void)
{
...
}
void newline(void)
{
...
}
void threeline(void)
{
...
}
和c++类似也是需要先声明,后定义,或者直接在声明时直接定义,
全局变量局部变量和其他语言相同
分支语句,与其他语言在形式上稍有不同,但是大体相同
void print_parity(int x)
{
if (x % 2 == 0)
printf("x is even.\n");
else
printf("x is odd.\n");
}
if /else if /else
if (x > 0)
printf("x is positive.\n");
else if (x < 0)
printf("x is negative.\n");
else
printf("x is zero.\n");