
C语言
diffjd
这个作者很懒,什么都没留下…
展开
-
变参函数详解
在调用函数时,如果我们希望函数的参数个数是可变的,那么便需要用到变参函数,既在每次函数调用时输入的参数个数不定。我们需要知道以下两点: 1 函数形参入栈方向为自右向左 2 在一个进程的内存空间中,栈低为高地址,栈顶为低地址。 所以我们可以从最后一个入栈的参数(形参第一个)根据地址以及栈空间的特点依次找到所有参数。C语言代码实现(不定参求和)#include<stdio.h>#d...原创 2017-05-19 20:20:43 · 462 阅读 · 0 评论 -
C语言实现异常机制setjmp() longjmp()
在C语言中,我们都知道goto语句可以用来实现循环,实质上就是一个局部跳转语句(同一个函数作用域内)。我们同样可以把它用于局部异常处理。 那么如果要实现非局部跳转显然goto语句就无能为力了,所以在头文件中声明了setjmp()与setlong()函数用于实现非局部跳转,它允许立即从一个深层嵌套的函数调用中返回。 int setjmp(jmp_buf env); 返回值:第一次调用返原创 2017-05-20 12:20:15 · 392 阅读 · 0 评论 -
有符号正数溢出变负问题
以1byte为例进行说明 正数区间:0000 0001 ~ 0111 1111 (1~127) 负数区间:1000 0000 ~ 1111 1111(-1~-127) 在有符号数中便存在 -0 与+0 的问题 -0:1000 0000 +0:0000 0000 C语言规定-0 既(1000 0000)为-128 所以当最大的正数 0111 1111溢出就会变成1000 0000原创 2017-06-01 22:01:46 · 3942 阅读 · 0 评论 -
0强转为指针的用处
ANSI C 标准允许任何值为0的常量被强制转换为任何类型的NULL指针 因此(type*)0 是一个类型为type类型的一个空指针 但是它不能被赋值 只能被用作本类型的地址来使用 eg: struct student { int id; char原创 2017-06-06 20:17:32 · 1736 阅读 · 0 评论