有错误欢迎大家提醒我
前言
马上要毕业了,回过头来发现自己虚度了三年的光阴。以此篇文章献给大学刚开始学c语言的小伙伴。
一、c语言你不知道的秘密,文章稍长,看完绝对有收获。
#define 宏定义,在c语言中书写的格式
#define zhengxing int
意思是会在编译阶段把所有遇到的“zhengxing”这个字符串都当作int来看待
#include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。所以使用函数的时候要引入对应的头文件。想知道c语言有哪些官方规定好的头文件可以去百度,每个头文件里的函数有哪些,也可以自行百度。我就不过多的阐述了。
定义常量
在 C 中,定义常量的方式:使用 #define 预处理器与使用 const 关键字。
使用conts时只需要在变量类型前面加上就行 conts int a=0;
许多的人写C 程序,写main里面的东西都不知道是干什么的。
main(int argc, char *argv[])
传入参数,与其他函数的"()"里面放的东西相同。argc 为参数个数,argv 是字符串数组, 下标从 0 开始,第一个存放的是可执行程序的文件名字,然后依次存放传入的参数,
main()或者main(void)也是可以的。这两个等价,作用是说main函数不传入任何参数。
在定义变量名或者函数名的时候必须以字母或下划线开头。
引入头文件时<>可以理解成系统自带的库,也可以写成" " 表示用户自定义的库。.h表示头文件.程序在编译时,需要找到那个头文件,使用<>这种方式编译器查找的时候,会在编译器的安装目录的标准库中开始查找,""这种方式,会在当前的工程所在的文件夹开始寻找,也就是你的源程序所在的文件夹。
c语言现在的标准是C11,上一个标准是C99.版本.具体的变动可以自行百度.
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | -32,768 到 32,767 |
unsigned short | 2 字节 | 0 到 65,535 |
long | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 0 到 4,294,967,295 |
这个表上的东西是最基本的,一定要知道,不能做到全部了解也要明白char 与int.
1位二进制 1位=1bit
8位二进制 8位=1byte(字节)
字节是数据大小的最小衡量单位。
一个汉字,占两个字节.也就是16位,有的地方也把位叫做字长.
各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
char类型一个字节有8位,8位的最大数值是255,0-255可以表示256个字符。256个字符就是ascii码。ascii码的256个就在这里对应上了。
float类型,占四个字节三十二位,0-22位表示小数,23-30位表示指数(10的几次方),31位表示指数的正负。具体的当时我记得实在计算机组成原理上面,如果想要深入学习的可以自行百度。
doubule类型,占8个字节,64位。0-52位表示具体的数,52到62表示指数,63表示指数的符号位。
得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type)
printf("int 存储大小 : %lu \n", sizeof(int));
说点不常用但是需要知道的关键字
关键字 | 说明 |
---|---|
case | 开关语句分支 |
const | 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变。只能读,不能更改 |
enum | 声明枚举类型 |
extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
goto | 无条件跳转语句 |
register | 声明寄存器变量 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
struct | 声明结构体类型 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 除常用的功能外,还可以声明无类型指针 |
volatile | 说明变量在程序执行中可被隐含地改变 |
while | 循环语句的循环条件 |
指针指向 void
类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。
常见的转义字符
转义序列 | 含义 |
---|---|
\\ | \ 字符 |
\' | ' 字符 |
\" | " 字符 |
\? | ? 字符 |
\n | 换行符 |
\r | 回车 |
然后还需要知道常见的定义类型,auto(默认的),static(静态的),extern(全局),register(寄存器)。
extern定义一个extern类型的变量,这个变量在这个项目里哪里都可以用。哪里都可以。
register比较特殊register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。
RAm就是内存,在内存卡与cpu之间。
位运算符
&(和),|(或),^(异或),~(取反),>>(右移),<<(左移)。
&与|与逻辑运算方式相同。
"^" 异或就是两个数的二进制位对齐,相同取0,不同取1
"~" 取反就是每一位二进制由原来的0变成1,1变成0
">>" 右移就是将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
"<<"左移,左边多余的丢掉,右边补0。
int a=1;
a=a<<1;
现在a就完成了左移,现在变量a的值位2
其他符号
sizeof()是运算符,不是函数,
& | 返回变量的地址。 |
int a=10;
printf("%d",&a);
结果是a这个变量在内存里的具体的位置
* | 指向一个变量。 | *a; 将指向一个变量。 |
总结
例如:以上就是今天要讲的