C 其他一些
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可变参数的实现原理基于函数传参数的的栈,参数从右往左入
随机推荐
- 201521123002《Java程序设计》第14周学习总结
本次作业参考文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. MySql数据库简单操作: 库操作: 显示所有数据库: show databases; 创建数 ...
- 201521145042《Java程序设计》第14周学习总结
MySql操作视频与数据库相关jar文件请参考QQ群文件. 本次作业参考文件 数据库PPT 0. 本周课程设计发布 Java课程设计 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总 ...
- 201521123029《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- hadoop-2.6.0源码编译问题汇总
在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...
- 06jQuery-02-层级选择器
因为DOM结构就是层级结构,所以我们经常要根据层级关系进行选择. 1.层级选择器 $('ancestor descendant'),选择祖先中的子孙,中间留空格: $('form[name=uploa ...
- HTTP属性管理器详解
1)HTTP Cache Manager 2)HTTP Cookie 管理器 3)HTTP 信息头管理器 4)HTTP 授权管理器 5)HTTP 请求默认值 为什么会有这些http属性的配置元件? ...
- 工欲善其事,必先利其器之open live writer写作
在博客园学习有一段时间,想想是不是自己也应该开始写点东西,做点总结,更加快速的提升自己. 查看小组/博客园使用帮助 得知目前windows live writer 已经停止更新并推荐安装 open l ...
- oracle pctfree和pctused 详解
一.建立表时候,注意PCTFREE参数的作用 PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert ...
- Day3 文件操作和函数
一 文件操作 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1.1打开文件读取内容 print(open("sounds","r", ...
- sql语句增删改查与子查询
修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02 ...