Hidden Tricks (C)(091121)
请运行下面的代码,观察结果,有人说怎么是死循环,你同意吗?为什么?
#include
<stdio.h>
int
main()
{
int
i = 0;
int
name[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for
(i = 0; i <= 10; i++)
{
name[i] = 0;
printf("ok\n"
);
}
return
0;
}
这段代码一开始我还以为是小儿科,一个很傻逼的代码,完全不认为会是死循环
…
后来事实证明,是我自己傻逼了,好了,不多说了,现在揭晓答案了。
答案:
这段程序会进入死循环,当
i
循环到
10
的时候,表面上看上去
”name[10]= 0”
这句操作是会在预料之外的,因为数组中的十个数字的最后一个是
name[9],
但就这最后那句操作的时候,神奇的事情发生了,程序发生了死循环,
i
神奇的又被置成了
0.
其实道理很简单,因为
name[10]
其实就是变量
i,
通过调试我们可以知道,这两个变量指向地址是完全相同的。在函数为局部变量在栈中申请空间的时候,
i
在
name
前面申请,
i
就在
name
的后面,所以要先向高地址写入数据,
i
与
name
数组是连续排列的,所以
”name[10]= 0”
这句其实就是
”i = 0”
。
zz from http://blog.csdn.net/DrZinc/archive/2009/11/21/4848661.aspx
相关文档:
curl c api
关于Curl的介绍很多,这里不详细介绍,主要谈一下简单应用。
最近研究了一下Linux下的curl C API,curl c API的文档比较丰富,唯一就是查找起来,费些时间。Curl的C API和curl的PHP API,函数接口和作用大致相同,所以如果有PHP API使用经验应该很好理解。
1:CURLcode curl_global_init(long flags);函 ......
va系列宏的用法的一般步骤:
vsptr(char *format, ...) //切记此处的格式
{
va_list argptr;
va_start(argptr, format); //使得argptr指向以format开头的存储空间
va_arg(argptr, type); //取传递的参数
......
内容:Introduction 和 Error Reporting
1. glibc 所实现全部或部分规范下的功能有
ISO C: The international standard for the C programming language.
POSIX: The ISO/IEC 9945 (aka IEEE 1003) standards for operating systems.
Berkeley Unix: BSD and SunOS.
SVID: The System V Interface Description.
X ......
C程序是由一组或是变量或是函数的外部对象组成的。 函数是一个自我包含的完成一定相关功能的执行代码段。下面小编和大家分享下C语言中的函数。
1. kbhit函数
kbhit函数是检查当前按下的键,其用法为:int kbhit(void);程序例子如下:
#include <conio.h>
int main(void)
{
c ......