创建: 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

if (a > ) {
printf("a > 0\n");
}else if (a == ) {
printf("a = 0\n");
}else {
printf("a < 0\n");
}
 switch

switch (a) {
case :
printf("a = 1\n");
break;
case :
printf("a = 2\n");
break;
case :
printf("a = 3\n");
break;
default:
printf("a != 1, 2, 3\n");
break;
}
 for

for (i = ; i < a; i++) {
printf("i = %d\n", i);
}
   
 do...while 
int i = ;
do {
printf("i = %d\n", i);
i++;
}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;

int testA[], testB[];
for(i = ; i < sizeof(testB)/sizeof(int); i++) {
testB[i] = i;
}
*testA = *testB;
for(i = ; i < sizeof(testA)/sizeof(int); i++) { //给testB赋值
printf("testA[%d] = %d ", i, testA[i]);
printf("testB[%d] = %d\n", i, testB[i]);
}//说明不可以直接把数组复制
int *p;
p = testB; //p指向testB的开头
i = ;
while (i < sizeof(testB)/sizeof(int)) {//指针遍历数组
printf("testB[%d] = %d\n", i, *(p++));
//p++;
i++;
}
 
 指针运算是实际值
 +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;

struct test {
int a;
int b;
}; typedef struct test Test;

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. CUDA_one

    首先我看了讲解CUDA基础部分以后,大致对CUDA的基本了解如下: 第一:CUDA实行并行化的过程分为两部分,一个是线程块之间的并行(这是在每个线程网格中grid进行的),一个是对于每一个线程块内部各 ...

  2. Vue如何引入icon图标

             1.下载icon图标,推荐icomoon网站,里面有大量的矢量图标,也可以自定义,当然你也可以去阿里巴巴矢量图标库下载你所需要的小图标.点击进入icomoon网站点击右上角“IcoM ...

  3. centos7安装mysql5.7.19及配置远程连接

    centos7安装mysql5.7.19及配置远程连接------https://blog.csdn.net/Lh19931122/article/details/77996213

  4. Linux学习笔记02

    1.文件处理命令:touch touch [文件目录][文件名] 如:touch /tmp/jiejie/jiejie.conf2.文件处理命令:cat cat 参数[文件目录][文件名]//显示文件 ...

  5. Leetcode 166.分数到小数

    分数到小数 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数,则将循环的部分括在括号内. 示例 1: 输入: num ...

  6. 【JZOJ4857】Tourist Attractions(Bitset)

    题意:给定一个n个点的无向图,求这个图中有多少条长度为4的简单路径. n<=1500 思路: #include<map> #include<set> #include&l ...

  7. 整体二分--BZOJ1901: Zju2112 Dynamic Rankings

    n<=10000个数有m<=10000个操作,1.询问一个区间的第k小的数:2.单点修改. 带修主席树. 整体二分. 整体二分的必要条件: #include<string.h> ...

  8. UVA 11400_ Lighting System Design

    题意: 给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量.已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱 ...

  9. JSON/xml、Processing 以及收集Java的设计模型

    JSON简介: 1.基本介绍 JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的 ...

  10. 谈谈hibernate的缓存

    一,hibernate是什么技术? 1  hibernate是一个orm 就是对象关系映射框架.  及我们创建的实体类对象与数据库表中的数据是一一对应的关系.  我们可以改变对象信息从而改变数据库中的 ...