Skip to content

c

解释型语言与编译型语言

前者相当于边翻译边执行,可以有点特别的功能,比如动态改到后面的代码;

后者相当于先统一编译,的好处是稳定。

其实语言是不分解释型还是编译型的,只看常用的是解释器还是编译器。

比如python常用解释型,c常用编译型。

你要给它们写编译器和解释器都是可以的。

对于面向对象的语言来说就是类库,对于C来说就是函数库

c语言来源于1969年的夏天 哈哈哈是从 B 语言发展过来的

是高级语言的底层语言

c也是贝尔实验室发明的喔!

原来 C9 9就是现在最通用的 C 的版本

mac上可以用编译器 gcc

\#include <stdio.h>

*int* main(){

printf("%d", 22+55);

return 0;

}

定义变量就直接是int xx = xx就好了。

int price;

求输入:scanf('%d', &price);//第二个参数需要为一个变量地址。 //这里的f代表formatted

&是一个取地址运算符,&a 是一个表达式,其功能是变量的地址。

而 %d 表示输入的类型

image-20230221164118127

同时也可加上长度格式:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf即double)。h表示输入短整型数据。

注意 这样子输入类型是很严格的 如果是d的话,那小数部分就会被舍弃掉

int a = 4; a = 2.5; //实际a等于2

int a = 'a';

int const A = 'a'; //这就是C语言定义常量的方法 推荐大写

很有趣的说法:如果一开始int a; 但是并没有给a赋值,就相当于住进了一间还没有被打扫过的屋子,此时的a是老数据的值 //想必js定义的时候会先清扫屋子吧~

比较

有个要注意的点是比较运算符的运算结果的值是1或者0!! //运算优先级的概念一旦知道了就很有用

所以if ( 1<=n<=10 ); 其实是恒成立的 因为1<=n不是1就是0

循环

重点 while循环 == for循环;

以及 while循环的写法和if是一样的;

以及每句程序的结尾必须是;或者{},因为do循环的结尾是..(),所以要打;号。

我的一些疑惑

  • 为什么 printf 里用 % 这么奇怪的占位符?

因为 prinf 来自于 b 语言的 writef,里面也是用 %,也许是作者以为 % 在语句中用得比较少把~

  • C是怎么知道新建一个function,要开辟多大的stack的?

https://stackoverflow.com/questions/21021223/how-does-the-gcc-determine-stack-size-the-function-based-on-c-will-use 以及:一个程序实际只有一个stack,main在stack的最底层