C语言基础知识整理合集

变量和类型

1B=8bit
1kB=1024B
1mB=1024kB
1GB=1024MB
1TB=1024GB
1PB=1024TB

  • 先定义后使用
  • 字母数字下划线,不能数字开头

# 整数类型

类型 存储大小 值范围
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

# 浮点数类型

类型 存储大小 值范围 精度
float 4 字节 1.2E-38 到 3.4E+38 6 位小数
double 8 字节 2.3E-308 到 1.7E+308 15 位小数
long double 16 字节 3.4E-4932 到 1.1E+4932 19 位小数

# 类型定义

变量是有地址中的一个名字构成的.
在定义中不允许连续赋值,如int a=b=c=5;是不合法的。

# 类型转换

(doubel)a;
字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。

  • 浮点数赋给整型,该浮点数小数被舍去;
  • 整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中; 强制类型转换的时候:
    自动类型转换:char->int->double<-char
    强制类型转换:char,short->unsigned->long->double<-float
    不能逆序,会有信息损失,分数转成整数就会舍掉小数位,char类型数据转换为int类型数据遵循ASCII码中的对应值
    这里
    int a=5;
    double_a=(double) a;#类型转换不会影响原来的值

# 字符&字符串

字符

定义字符用char来定义(实质上是ascii的编码的int),所占空间和范围见上表,占位符使用%c

char q='a'
char x='x';
printf("%d,%c",x,x);

声明一个字符,但是我们用整型输出,就会输出它对应的ASCII码数字了,char只能存储一个字符,它的取值范围是:ASCII码字符 或者 -128~127的整数

WARNING

''单引号,切忌,千万不能用双引号,双引号是来表示字符串的。

字符串

c中没有string。c的字符串是以null'/0'结尾的一维字符数组,字符数量会比实际显示的字符数多1,可以简写为char yy[] = "Hello";

char xx[4]={'x','y','z','\0'};
char yy[]="hello";
printf("%s,%s",xx,yy);

c基本的几个函数(等后面c++里还会变)

序号 函数 目的
1 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
2 strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。
3 strlen(s1); 返回字符串 s1 的长度。
4 strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
5 strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6 strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

----from 菜鸟教程

# 枚举enum

enum 名字 {e1,e2,e3...} e;

这样就定义了一个枚举e(也可以先不定义e,后面enum 名字 e),第一个元素e1默认为0,后续元素逐个+1,可以自己定义,如e3=5那么元素变为0,1,5,6...

WARNING

枚举被定义int或unsigned int,不连续的枚举无法遍历

留坑

# 常量

# define

#define X 3定义了X为3,利用宏定义,不能改变,不做计算,不做表达式求解

  • define宏是在预处理阶段展开。
  • define宏没有类型,不做任何类型检查,仅仅是展开
  • define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。

冷知识

宏定义不分配内存,变量定义分配内存
比如说C语言标准规定编译器至少支持宏的名字有63个字符(多的话意义不能保证),至少支持同时定义4095个宏,函数形的宏最多可能有127个参数

define的上限

# const

const 变量类型 X=3使用const定义了X为3

  • const常量是编译运行阶段使用。
  • const常量有具体的类型,在编译阶段会执行类型检查
  • const常量会在内存中分配(可以是堆中也可以是栈中) const 可以节省空间,避免不必要的内存分配看代码
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!

WARNING

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区),而 #define定义的常量在内存中有若干个拷贝。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

一些规则

  • 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
  • 在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
  • 需对外公开的常量放在头文件中,不对外公开的常量放在定义文件头部,可以把不同模块的常量集中放在一个公共头文件中
  • 如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。

WARNING

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同,应该用类中的枚举常量来实现

# 输入输出

# IO含树

scanf和printf
scanf("占位符1,占位符2",变量地址1,变量地址2,...);
控制台输入要和这个一样1,2
printf(“格式控制字符串”, 输出表列)
printf和puts两者都属于stdio.h这个头文件,都能输出字符串
puts()在输出字符串时会将'\0'自动转换成'\n'进行输出.

# 占位符

格式字符有d,o,x,u,c,s,f,e,g等。

类型 作用
%d 整型输出
%ld 长整型输出,
%o 以八进制数形式输出整数,
%x 以十六进制数形式输出整数,或输出字符串的地址。
%u 以十进制数输出unsigned型数据(无符号数)。
%c 用来输出一个字符,
%s 用来输出一个字符串,
%f 用来输出实数,以小数形式输出,默认情况下保留小数点6位。
%.100f 用来输出实数,保留小数点100位。
%e 以指数形式输出实数,
%g 根据大小自动选f格式或e格式,且不输出无意义的零。

WARNING

%d与%u有无符号的数值范围,也就是极限的值,不然数值打印出来会有误。

# 特殊符号

6个特殊符号

符号 意义 ascii对应
空格 ' ' \u0020
换页 '\f'
换行 '\n' \u0010
回车 '\r' \u0013
水平制表符 '\t' \u0009
垂直制表符 '\v'

# 运算符

常见的我就不放了,注意%是取余数

等级 运算符
1 ( )
2 ! +(正号) -(负号) ++ --
3 * / %
4 +(加) -(减)
5 < <= >= >
6 == !=
7 &&
8 **
9 ?:
10 = += -= *= /= %=

WARNING

注意:复合运算符中运算符和等号之间是不存在空格的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,696评论 0 3
  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 1,725评论 1 6
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,797评论 0 38
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 689评论 0 2
  • 有一句话说一百句的是文学家,这叫文采;有一句说十句的是教授,这叫学问;有一句说一句的是律师,这叫谨慎;那有点破事就...
    张秀水阅读 468评论 0 0