基础
为甚么学C
主要是因为最近在学习nginx
这货是用C写的,如果想自己写一个模块,并编译到nginx当中,那么C必不可少
helloworld
在虚拟机192.168.27.131上的/home/solofeng/study/repos/C下开展国际惯例
[solofeng@com C]$ vi helloworld.c
==========================
#include <stdio.h>
int main(){
printf("hello world! \n");
return 0;
}
==========================
[solofeng@com C]$ gcc helloworld.c -o helloworld /*编译*/
[solofeng@com C]$ ls
helloworld helloworld.c
[solofeng@com C]$ ./helloworld /*执行*/
hello world!
关于C中的格式化输出的%
实际上在输出中是作占位符的作用
格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。
格式字符有d,o,x,u,c,s,f,e,g等。
如
%d digit 整型输出,%ld长整型输出,
%o octonary 以八进制数形式输出整数,
%x hexadecimal 以十六进制数形式输出整数,或输出字符串的地址。
%u unsigned 以十进制数输出unsigned型数据(无符号数)。注意:%d与%u有无符号的数值范围,也就是极限的值,不然数值打印出来会有误。
%c char 用来输出一个字符,
%s string 用来输出一个字符串,
%f float 用来输出实数,以小数形式输出,默认情况下保留小数点6位。
%11.9f float 用来输出实数,总位数11位,小数点后9位
%e 以指数形式输出实数,
%g 根据大小自动选f格式或e格式,且不输出无意义的零。
变量
1. 数据类型
基本类型
int
char
float
double
_Bool(布尔)
enum(枚举)
指针类型
构造类型
空类型
2. C的数据类型有点特殊,他的大小会根据不同的环境会有所异同,这就很尴尬了.我只能大概知道他的大小.而且还可以分为有符号signed和无符号unsigned
char 1byte;
short 2byte;
int 4byte;
long 8byte;
emmm,和java其实一样呀
3. 进制转换,略
4. 反码,补码,略
举个栗子:
[solofeng@com C]$ vi helloworld.c
==========================
#include <stdio.h>
#define name "guangda"
int main(){
printf("hello world! \n");
printf("hello ,i m %s.\n",name);
return 0;
}
==========================
[solofeng@com C]$ rm helloworld
[solofeng@com C]$ gcc helloworld.c -o helloworld
[solofeng@com C]$ ls
helloworld helloworld.c
[solofeng@com C]$ ./helloworld
hello world!
hello ,i m guangda.
上文中的#define name "guangda"
注意#在C中不是注释,放在前面表示宏定义(大概可以理解为预定义,在这里就是预定义了一个全局变量name,所有函数皆可用)
疑问: int,char,float等类型的字节数是固定的,string实际上是字符数组,那么C如何让cpu知道哪里是数组的结尾
回答: 实际上,存储字符串数组时,除了字符串本身以外,在最后一个字符的后一位存储一个"\0"表示数组的结束,当cpu读取到"\0"时,便明白字符串结束了,不再往下读取
运算符&语句&注释
+ - * / %
++ -- += -= *= /= %=
< > = != >= <= ==
>> <<
& | ~
&& || !
sizeof (长度运算符)
. (对象运算符)
-> (指针运算符)
pow函数->幂函数(例如求2的10次方)
if(){}
if(){}else{}
if(){}else if{}else{}
switch(){
case num: expression; break;
default: expression; break;
}
while(){}
do{}while();
for(){}
三元exp1 ? exp2 : exp3;
//
/**/
数组
int list[10] = {
1,2,3};
sizeof(list)结果是返回数组占的空间的大小,而不是元素的个数
char name[] = "guang";
char name[] = {
'g','u','a','n','g&#