创建: 2017/06/17

更新: 2017/10/14 标题加上【WIP】,增加创建时间
更新: 2018/02/05 被Objective-C引用部分加上id方便链接,代码放进代码模板 
 

 基础
 基本类型

 字符  char   ‘A'
 整数  int   123
 浮动小数点数  float   123.123
 双倍浮点数  double  123.123
 无  void
 变量类型

 局部变量  
 全局变量  
   
   
   
 注释

   
 //....  
 注意  C的注释不能嵌套
   
   
   
   
   
   
 控制语句
 if

  1. if (a > ) {
  2. printf("a > 0\n");
  3. }else if (a == ) {
  4. printf("a = 0\n");
  5. }else {
  6. printf("a < 0\n");
  7. }
 switch

  1. switch (a) {
  2. case :
  3. printf("a = 1\n");
  4. break;
  5. case :
  6. printf("a = 2\n");
  7. break;
  8. case :
  9. printf("a = 3\n");
  10. break;
  11. default:
  12. printf("a != 1, 2, 3\n");
  13. break;
  14. }
 for

  1. for (i = ; i < a; i++) {
  2. printf("i = %d\n", i);
  3. }
   
 do...while 
  1. int i = ;
  2. do {
  3. printf("i = %d\n", i);
  4. i++;
  5. }while(i < a);
   
   
   
   
 数据类型与式
 数据类型修饰符 

 long  long int %ld
 long double 也可以  %lf
 short   short int %hd
 signed  默认int, char都自带这个
 unsigned  unsigned int  
%u
(long .. %lu  short ... %hu)
 unsigned char 
 输出时  float, double 都是%f
 输入时  float %f
 double %lf
 long double %Lf
   
   
 变量类型

 全局变量  scope为程序全体
 局部变量  scope为声明所在范围

 (auto, 默认添加,故省略)
 auto int sample;
 函数的参数是特别的局部变量
 
 
 
   
   
   
   
   
   
   
   

 常数  具体字符或者const声明过的量

 小数  普通表达 123.123 
 科学计数法 1.23123E2
 字符常量  'Z'
 也可以直接带数字
 char test = 65
 进制

 十六进制   0x12F 
数值大小写无所谓
 八进制  07878
   
   
   
 末尾添加识别符

 float  F
 12.2F
 long double  L 
 12.2L
 unsigned  U
 21U
 long  L
 12L
   
   
   
   
   
   
   
   
   
   
   
   
 声明与定义

 声明  int a;
 定义  a = 10;
 int a = 10; 声明并定义
 类型转换

 式子里的类型转换

 整数提升
integral promotion
 char, short变成int
 类型提升
type promotion
 变成最大的类型
 long double > double >
 float > unsigned long >
 long > unsighed > int ...
 代入的类型转换

 整数(char) -- 整数(long)  丢失高位
 整数 -- 浮点数  丢失小数点以下
 类型转换  (type)val
 例: (double)12
   
   
   
   
   
   
   
   
   
   
   
   
   
 数组与字符串
 数组

 声明 

 一元数组  type name[size];

例: int arraytest[128];

 多元数组  type name[size][size][size]
 例: int arraytest[128][128][128]
   
   
   
 定义  name[size] = {val1, val2, ....}

例: arrayTest[5] = {1, 2, 3, 4, 5};
     
arrayTest[2][3] = {
     
    {1, 2, 3},
     
    {1, 2, 3},
     
    {1, 2, 3}
      }

 初始化并定义的话可以不指定长度
 自动判断
 int a[] = {1, 2, 3}
 char str[] = "..."
   
   
   
   
 注意  C语言不自动检查索引的范围,要程序员自己注意
 无法复制数组全体,要复制只能一个一个元素复制

一元字符串初始化 str[128] = "..."

   
   
   
 字符串

 C语言中的字符串  带Null文字('0')的字符数组
 以'0'结尾
 读取字符串   gets()

 头文件  stdio.h
 作用  一直接受到遇到\n为止,把换行转为'0' 
 注意  不检查范围,有多少接受多少。
 可能超出数组的范围
   
   
   
   
 标准库  string.h
 基本的文字库函数

 复制  strcpy(target, source)
 把source复制到target上
注: 不检查范围
 连接  strcat(target, source)
 把source添加到target后面
 注: 不检查范围
 比较  strcmp(str1, str2)
 1 》2  >0
 1 = 2  = 0 完全相同返回0
 1《 2   < 0
 长度  strlen(str)
 注: 最后的零字符'0'不计入 
   
   
   
   
   
   
 转换类库函数  atoi("100")  // 100

 标准库  stdlib.h
 atoi(str)  str ---> int
 atof(str)  str ---> double
 atol(str)  str ---> long int
 exit(n)  退出程序,0为正常退出

 和return区别  
 exit()在哪里都会直接结束程序
 递归中也是直接退出
 
   
   
   
   
   
   
   
   
   
   
   
   
 指针
 运算符

 星号获取地址的值
 (アスタリスク,asterisk)
 *
 和号获取地址
 (アンパサンド,Ampersand)
 &
   
   
   
 声明  type *val;
 例: int *test;
 注意

 指针和指针所指对象要相同数据类型  
 指针在初始化(指向某处)之前不能用  
 零指针(NULL)试做无效指针,不指向任何地方  
 不带索引的数组表示数组开头的地址  int a[128];
 a = &b;

  1. int testA[], testB[];
  2. for(i = ; i < sizeof(testB)/sizeof(int); i++) {
  3. testB[i] = i;
  4. }
  5. *testA = *testB;
  6. for(i = ; i < sizeof(testA)/sizeof(int); i++) { //给testB赋值
  7. printf("testA[%d] = %d ", i, testA[i]);
  8. printf("testB[%d] = %d\n", i, testB[i]);
  9. }//说明不可以直接把数组复制
  10. int *p;
  11. p = testB; //p指向testB的开头
  12. i = ;
  13. while (i < sizeof(testB)/sizeof(int)) {//指针遍历数组
  14. printf("testB[%d] = %d\n", i, *(p++));
  15. //p++;
  16. i++;
  17. }
 
 指针运算是实际值
 +1是前进1个数据大小的地址
 
   
   
   
   

   
   
   
   
   
   
   
   
   
   
   
 函数与递归
 函数原型  void test();
 放在开头
 也就是函数的声明,定义放在其他地方
 长度不定的函数  int test(int a, ...);
   
   
   
  &nbr>
   
 输入输出I/O
 EOF  -1
 宏替换  #define SAMPLE 0
 输入输出1
 (字符)

 头文件: stdio.h
 输入
 int getchar(void)  直接带入char
 高位直接舍弃(高位本来就没用)
 失败返回EOF,也就是-1 
 文件输入输出时候重定向也可能出错
 不用检验,失败了基本是硬件问题
   
   
 输出
 int putchar(int ch)  
 失败返回EOF,也就是-1  不用检验,失败了基本是硬件问题
   
   
 输入输出2
 (字符串)

 头文件: stdio.h
 输入
 char *gets(char *str)  读到改行
 返回值
 成功返回字符串开头的指针
 失败返回NULL
   
   
 输出
 int puts(char *str)  输出str并附加\n
 返回值

 成功返回正数 
 失败返回EOF,也就是-1
   
   
 printf

 指定  %[+/-][[0]最小幅度][.][精度]格式修饰符
 %c   字符
 %d
 %i
 带符号的10进制整数
 %e
 %E
 小数的科学计数法
 1.234e10
 1.234E10
 %f  10进制小数
 double, float
 %g
 %G
 %f和%e中小的那个
 %f和%E中小的那个
 %o  不带符号的8进制数
 %s  字符串 
 %u  不带符号的10进制数
 %x
 %X
 不带符号的16进制数
 小写 
 不带符号的16进制数  大写
 %p  指针
 注:用其他格式指定的话,高位会被舍弃(已测试)
 %n  ???
 %%  %符号
   
   
   
   
   
   
   
 scanf  主要用来读取数字

 %c  字符
 %d
 %i
 10进制整数 
 两个一样
 short 带h
 long 带l
 %e
 %f
 %g 
 小数 
 三个一样
 默认float
 double用l
 long double 用L
 %o  8进制整数
 short 带h
 long 带l
 %x  16进制整数
 short 带h
 long 带l
 %s  字符串
 不推荐
 遇到空白(空格,tab,换行)会自动结束
 %p  指针
 %n  ???
 %u  不带符号的10进制整数
 short 带h
 long 带l
 %[]  字符集合
 一直读到集合里没有的

 指定范围, 可用 -
 [AB], [ABC], [01A]
 [A-Z]
 [A-Za-z]
 [0-9]
 想指定"-"必须放开头或者结尾
 [-...]
 [...-]
 [^...]  
 除去指定的
 
 
 
 %*c  忽视一个字符 
 %*格式修饰符
 忽略这个
 空格
 任意字符
 忽略所以空格直到出现一个非空格的
 如"%d %d"读取  1  
     
     
  2
 和他一直的以外的全部丢掉
 可以指定长度  除了%c 和%n
 如 s ]
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 文件输入输出
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 构造体与共用体
 声明构造体  struct tag {
   member1;
   member2; ...
 };
 加强版 typedef struct tag Tag;

  1. struct test {
  2. int a;
  3. int b;
  4. };
  5.  
  6. typedef struct test Test;

  1. typedef enum { false, true } bool;
 声明变量  struct tag val-name;
 Tag val-name;

Test test1 ;

 初始化

 单个 

Test test1 = {

.a =
1,

.b =
2

};

 结构体的数组

Test test[2] =
{

{.a =
1, .b =
2},

{.a =
3, .b =
4}

};

 获取成员

 点运算符   val-name.mem-name
 例: test1.a
   
 箭头运算符  val-name->mem-name
例:  test2 =
&test1;
     
test2->.a
   
   
 计算大小  sizeof (struct tag)
 sizeof(Tag)
 结构体的嵌套  结构体的成员可以是结构体
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 复杂的数据类型与运算符
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 预处理以及其他高度的话题
 动态分配内存

 库文件: stdlib.h
 分配
 void *malloc(size_t numbytes);
分配区别没有初始化
 返回分配的内存的开头指针
 失败的话返回NULL
 要检验是否失败
 void *calloc(size_t nmemb, size_t
size);
区别:nmemb指定分配大小的个数,并且所有区域以0初始化 
 要类型转换
   
   
 释放
 void free(void *ptr);  
   
   
   
 static声明函数  仅在当前文件内的函数可见
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

【WIP】C基础语法的更多相关文章

  1. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  2. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  3. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  4. emmet 系列(1)基础语法

    emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...

  5. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  6. Java基础语法

    java基础学习总结——基础语法1 一.标识符

  7. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  8. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  9. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  10. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

随机推荐

  1. UVa 806 四分树

    题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include &l ...

  2. 【06】对AJAX的总结(转)

    对AJAX的总结   通过前面对 AJAX 的讲解,我们可以将 AJAX 请求分成以下几个步骤: 创建 XMLHttpRequest 对象: 设置事件处理函数,处理返回的数据: 初始化并发送请求. 可 ...

  3. amoeba连接mysql--ERROR 2006 (HY000): MySQL server has gone away

    amoeba下载地址:http://sourceforge.net/projects/amoeba/files amoeba version:amoeba-mysql-binary-2.1.0-RC5 ...

  4. poj 1330lca模板题离线算法

    #include<iostream> #include<vector> using namespace std; const int MAX=10001; int pre[MA ...

  5. Linux下汇编语言学习笔记63 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  6. [bzoj3991][SDOI2015]寻宝游戏_树链的并_倍增lca_平衡树set

    寻宝游戏 bzoj-3991 SDOI-2015 题目大意:题目链接. 注释:略. 想法:我们发现如果给定了一些点有宝物的话那么答案就是树链的并. 树链的并的求法就是把所有点按照$dfs$序排序然后相 ...

  7. Codeforces 284E(概率)

    题意: 在T秒内,按输入顺序给出n首曲子的播放顺序,玩家需要从第一曲向后听. 第i首曲子有pi和ti两个属性,pi代表在当前这1秒内有pi/100的概率听出这首曲子是什么, ti代表如果一直持续听ti ...

  8. Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)

    说明:无论是否已经搭建好集群,还是使用什么样的客户端去连接,都是必须把全部IP列表集成进去,然后随机往其中一个IP写. 这样做的好处: 1.随机IP写入之后,Redis Cluster代理层会自动根据 ...

  9. 【.Net 学习系列】-- Windows服务定时运行,判断当前时间是否在配置时间段内

    /// <summary> /// 判断程序是否在设置运行时间内 /// </summary> /// <param name="startTime" ...

  10. 手把手教你编写一个简单的PHP模块形态的后门

    看到Freebuf 小编发表的用这个隐藏于PHP模块中的rootkit,就能持久接管服务器文章,很感兴趣,苦无作者没留下PoC,自己研究一番,有了此文 0×00. 引言 PHP是一个非常流行的web ...