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. Python[小甲鱼006常用操作符]

    1.操作符 下面有一些需要注意的操作符 >>>3 ** 2 9 上面这个代表着平方   即  3的平方 >>>3 ** 5 243                  ...

  2. 201521123068 《java程序设计》 第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1.网络基础 1.1 比较ping www.baidu.com与ping cec.jmu. ...

  3. 生成/etc/shadow文件中的密码

    shadow文件的格式就不说了.就说说它的第二列--密码列. 通常,passwd直接为用户指定密码就ok了.但在某些情况下,要为待创建的用户事先指定密码,还要求是加密后的密码,例如kickstart文 ...

  4. Java+大数据开发——HDFS详解

    1. HDFS 介绍  • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...

  5. Mysql免安装版配置【图文版和文字版】

    图文版 配置环境变量 新建一个my.ini文件,添加下面内容 [mysqld] basedir=C:\\software\Mysql\mysql-5.7.14-winx64 datadir=C:\\s ...

  6. Vuforia开发完全指南---不懂编程也能做AR程序

    不懂编程也能做AR程序 可能一听到要做AR程序,很多人都会想到这是程序员的事.如果不懂编程,不会写代码,是做不了AR程序的.其实,Vuforia的Unity SDK非常人性化,即使你不会编程,也能做出 ...

  7. Django查询数据库性能优化

    现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(m ...

  8. PHP数组运算符

    PHP数组预算符有==(等于),===(恒等于),!=(不等于),<>(不等于),+(联合): 注意:没有-(减号)运算符: $a=array("a"=>&quo ...

  9. Python 接口测试(五)

    五:使用python进行组织编写接口测试用例 接口测试其实就是几个步骤. 拿到接口的url地址 查看接口是用什么方式发送 添加请求头,请求体 发送查看返回结果,校验返回结果是否正确 明白了接口测试的测 ...

  10. java 读取properties文件总结

    一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...