C基本类型

C基本类型有:

  char:8位,可添加修改符signed或是unsigned

  short:16位,同有singed和unsigned

  int:32位,同有singed和unsigned

long:在32位系统为32位,64位系统为64位,分为signed和unsigned

  long long:64位,分为signed和unsigned

  float:32位,精确度为6

  double:64位,精确度为15

  long double:80位,精确度为19

C中没有bool类型,可以引入stdbool.h文件使用定义的bool,true, false宏

常用字面值使用:

  int in = 1234;

  long ln = 1234L;

  unsigned int uin = 1234U;

  unsigned long uln = 1234UL;

  float  f = -12.34e-1f;

  double df = 123.45;

  long double ldf = 123.45L;

C GOTO使用示例

GOTO虽然会破坏程序的结构,使用代码可读性变差,但是GOTO依然还是有可用的地方

#include <stdio.h>
#include <stdbool.h>

int main()
{
  bool a = false;

step1:
  if (a)
    goto step2;
  while (true)
  {
    printf("while out\n");
    while (true)
    {
      printf("while inner\n");
      a = true;
      goto step1;
    }
  }

step2:
  return 0;
}

 

C setjmp和longjmp

#include <stdio.h>
#include <setjmp.h> void test(jmp_buf *env)
{
printf("setjmp test\n");
longjmp(env, 1);
} int main()
{
jmp_buf env; int ret = setjmp(env); if (!ret)
test(&env);
else
printf("longjmp... %d\n", ret); return 0;
}

int setjmp(jmp_buf env):函数会保存当前执行环境,初次调用时会返回0值;在调用链中如果遇到void long_jmp(jmp_buf env, int value)时会返回该处,并取得value值。

与goto相比,longjmp可以实现函数间的跳转,goto只能在函数内部跳转。

C 返回函数与闭包的考虑

#include <stdio.h>

typedef int (*fun)();

fun closure(int i)
{
int squ()
{
return i*i;
}
return squ;
} int main()
{ fun f = closure(2); printf("closure %d\n", f()); return 0;
}

C中函数的嵌套定义可以实现类似闭包的效果,只是如果函数是定义在一个循环中时,如:

    for (; i>arg-2; i--)
{
int squ()
{
return i*i;
}
arr[arg-i]=squ;
}

在最后使用arr函数数组时始终是指向最后定义的一个squ函数。查看2次循环时,发现squ始终指向同一个地址,所以此处认为C在处理时会将前面定义的squ函数覆盖。

这个现象和Python中的返回函数中,引用了可变化变量的现象不同,Python中在循环中定义的函数是指向不同的地址的。

C 实现可变参数

C中可以借助va_list实现可变参数:

va_start:使用传入的可变参数的第一个变量初始化va_list

va_arg:获取当前可变参数,每次调用时会将指针向后移

va_end:结束

利用这个机制实现可变参数时,需要保证传入的参数可判断结束位置,即第一个参数用于控制结束,同时传入的参数必须得有这个参数作为结束。

C可变参数的实现原理基于函数传参数的的栈,参数从右往左入

随机推荐

  1. 201521123018 《Java程序设计》第10周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 一.inally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 答: 4-2中 ...

  2. python 基础之字符编码和文件处理

    一.字符编码 (1)计算机基础知识 (2)python 解释器执行py文件的原理 <1>python 解释器启动 <2>python解释器相当于一个文本编辑器,打开txt.py ...

  3. 对Spring IOC的理解(转)

    Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理 ...

  4. 举例让抽象问题具体化:包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). import java.util.Stack; public c ...

  5. Java实现基本排序算法

    稳定排序算法性能比较 冒泡排序代码: /** * 冒泡排序 * * @param arr * @return */ public int[] bubbleSort(int[] arr) { int t ...

  6. apriori关联规则

    挖掘数据集:贩物篮数据 频繁模式:频繁地出现在数据集中的模式,例如项集,子结构,子序列等 挖掘目标:频繁模式,频繁项集,关联规则等 关联规则:牛奶=>鸡蛋[支持度=2%,置信度=60%] ...

  7. 【Conclusion】MySQL使用

    MySQL使用 因为数据库实验用到了MySQL,这里对现在已经涉及到的MySQL部分操作做一个简单的小结. 1.安装MySQL 上MySQL的官网下载对应自己OS平台的MySQL安装文件,有在线安装和 ...

  8. 全面了解Android热修复技术

    WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...

  9. Android 从ImageView中获取Bitmap对象方法

    showImageView.setDrawingCacheEnabled(true); Bitmap bitmap=showImageView.getDrawingCache(); showImage ...

  10. bzoj3997组合数学(求最长反链的dp)

    组合数学 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...