从0开始学习c语言
要学习C语言的话,首要就是要学习一下代码的基本框架。
#include<>
//添加头文件
//头文件中包含了很多常用的函数(别人已经写好的),要使用这些函数时必须要声明该函数。
//主函数(运行的代码一般都写入主函数)
int main(int argc, char *argv[]){
return 0;
//函数返回的数据,0代表成功,-1代表错误或者失败
}
一个标准的C语言代码格式就是这样。
先写一个简单的Hello World代码:
#include <stdio.h>
int main(int argc, char *argv[]){
printf("Hello World");
}
再从这之中详细讲解一下。
1.注释
注释,是解释/描述/备注性的语言,不会被编译器翻译成机器码,相当于是给程序员观看,注释可以一次注释一行或者多行。
/* */ 可以注释一行或者多行
// 注释一行代码
2.词法符号
C语言中词法符号大致分为五种,分别为 关键字;运算符;分隔符;标点符号;标识符。
2.1.关键字
关键字:标准规定好的一些有特殊含义的字符
1.数据类型(有符号 无符号):
char short int long float double signed(有符号,一般默认) unsigned(无符号) enum(枚举类型)
2.存储类型:
auto static extern register (const, volatile 用于修饰)
3.控制语句:
if-else switch-case-default for while(do-while) goto break continue(结束本次循环) break(退出当前语句)
4.构造
union struct
5.求字节
sizeof
6.取别名
typedef
7.空类型
void
2.2.运算符
C语言语法规定的运算符(ps. 不能用数学的思路,机器只看得懂机器语言)
2.2.1.算术运算
+ - * / %(取余)
进行算数运算时一般情况下保证两个数据的数据类型是一致的
整数 做除法运算时,结果只能是整数 5/2 ==> 2
小数 做除法运算时,结果就有整数有小数 5.0/2.0 ==> 2.5
整数 做取余运算时,变换为做除法,得到他的余数
举例
10÷3 ==>3 ....1
10/3 ==>3
10%3 ==>1
2.2.2.逻辑运算
逻辑-将数据看作一个整体,只有真(1或者非零数据)和假(0)
参与逻辑运算
&&(逻辑与):前后都为真,则结果为真
(1>2)&&(4<5) 结果为假(0)
(1<2)&&(4<5) 结果为真(1)
(1>2)&&(4>5) 结果为假(0)
(1<2)&&(4>5) 结果为假(0)
||(逻辑或):有真则为真,全假结果才是假
(1>2)||(4<5) 结果为真(1)
(1<2)||(4<5) 结果为真(1)
(1>2)||(4>5) 结果为假(0)
(1<2)||(4>5) 结果为真(1)
!(逻辑非):真变假,假变真
! (1>2) 结果为真(1)
! (1<2) 结果为假(0)
短路法则
(1>2)&&(5>4) 因为(1>2)已经为假,所以一定是假,不会去计算后面的
(1<2)||(5<4) 因为(1<2)已经为真,所以一定是真,不会去计算后面的
这样子能降低计算量
2.2.3.关系运算
判断两个数或者两者之间的关系
> < >= <= != ==(等于)
关系成立则结果为真(1),关系不成立则为假(0)
1 == 2 结果为假(0)
1 != 2 结果为真(1)
3 > 3 结果为假(0)
3 >= 3 结果为真(1)
2.2.4.位运算
在进行位运算的时候,其中的位指的是二进制的位,符号位要参与运算
将数据转化成二进制有整除法和拼凑法
整除法:将数据一直除以2取它的余数,知道1为止
拼凑法:将数据分成几个2的不同次方的数相加,再按照次方数+1即为1进行转化二进制
例子:
209÷2 = 104...1 104÷2 = 52...0 52÷2 = 26...0 26÷2 = 13...0 13÷2 = 6...1 6÷2 = 3...0 3÷2 = 1...1 1÷2 = 0...1
209 = 128+64+16+1 ==> 1101 0001
二进制之后进行位运算
&(位与) |(位或) ~(位取反) ^(异或) >>(右移运算) <<(左移运算)
6 & 4 ==> 0110 & 0100 ==> 0100 结果为4
6 & 3 ==> 0110 & 0011 ==> 0010 结果为2
3 | 4 ==> 0011 | 0100 ==> 0111 结果为7
3 | 6 ==> 0011 | 0110 ==> 0111 结果为7
~3 ==> ~0011 ==> 1100 结果为12
异或:相异(不同)为1,相同为0
3 ^ 4 ==> 0011 ^ 0100 ==> 0111 结果为7
3 ^ 6 ==> 0011 ^ 0110 ==> 0101 结果为5
对于右移运算符:
有符号数进行右移时,左边补符号位(负数左边补1)
右移运算符可以当作除法:除以二的位数次方
左移运算符可以当作乘法:乘以二的位数次方
3 >> 1 ==> 0011向右移动一位 ==> 0001 结果为1
3 << 2 ==> 0011向左移动二位 ==> 1100 结果为12
3 << 4 ==> 0011向左移动四位 ==> 0011 0000 结果为48(按照一个字节来计算的)
3 << 8 ==> 0011向左移动八位 ==> 0000 0000 结果为0(按照一个字节来计算的)
2.2.5.赋值运算
将 等号 右边的值 赋值给 左边 的变量
=
int num = 2; //num占了4个字节,能存放0 - 2^32 -1
复合赋值运算
+= -= *= >>= <<= &= |= ^=
num += 5; ==> num = num + 5
num -= 2; ==> num = num - 2
2.2.6.特殊运算符
1.自增自减运算符
int num = 10;
num ++; ==> num = num +1 ;
num --; ==> num = num -1 ;
++ num; ==> num = num +1 ;
-- num; ==> num = num -1 ;
做复杂运算时:
++num, 先将num的值自增1,再参与其他运算
num++, 先参与其他运算,再将num的值自增1
--num, 先将num的值自减1,再参与其他运算
num--, 先参与其他运算,