有错误欢迎大家提醒我
前言
马上要毕业了,回过头来发现自己虚度了三年的光阴。以此篇文章献给大学刚开始学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这个变量在内存里的具体的位置
总结
例如:以上就是今天要讲的
|