
C语言
活在阳光下
这个作者很懒,什么都没留下…
展开
-
int和unsigned int相互转换的问题
先看下面这段代码:#include void main(){ unsigned int a=6; int b=-20; if((a+b)>6) printf(">6"); else printf("<=6");}乍看认为结果是6,这是因为a+b做了隐式的转换,把int转换为unsigned int. 编译器就会把b当做一个很大的正数!!!原创 2016-03-04 10:31:27 · 14911 阅读 · 0 评论 -
static和全局变量和局部变量的问题
在c语言中,static有好几种作用,下面介绍:1.隐藏的作用比如说我们在一个源代码文件中定义了一个整型变量a(全局变量)。那么在整个项目中a都是可见的,如果在其前面加上static,那么a此时变成了一个静态的全局变量,此时a只能被本源代码文件中引用,对其他代码文件是隐藏的,对于函数来说static也具有隐藏的作用。2.变量持久化的作用static修饰的变量全部存储在静态数据区,在原创 2016-03-04 10:47:36 · 597 阅读 · 0 评论 -
有关对sizeof的使用
在32位系统上,每个整数占用四个字节,对任意的指针求sizeof得到的结果都是4.另外在C/C++中,当数组作为函数的参数进行传递时,数组就会自动退化为同类型的指针!原创 2016-03-04 10:53:14 · 272 阅读 · 0 评论 -
volatile
先看两段代码:int i=0;int j=i;int k=i;//volatile int i=0;int j=i;int k=i;第一段代码编译器对代码进行优化,因为代码一的两条语句中,i没有被用作左值。这个时候编译器认为i的值没有发生改变,所以在第一条语句时从内存取出i的值付给j后i并没有被丢弃,而是在第二条语句是赋给k。编译器不会生成出汇编代码重新从内存里取i的值,原创 2016-03-04 11:06:12 · 288 阅读 · 0 评论 -
a和&a的区别
下面先看一段代码:#include void main(){ int a[5]={1,2,3,4,5}; int* ptr=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1));}打印出来的结果是2,5.为什么呐?听我分析:&a+1 取数组的首地址,加1,&a是整个数组的首地址,加上一代表了a[5](越界)。(int原创 2016-03-04 22:29:36 · 946 阅读 · 0 评论 -
C++与Lua交互的C API
1、C API的介绍Lua是一种嵌入式的语言。即Lua不是一个单独运行的程序,而是一个可以链接到其他程序的库。通过C API就可以将Lua的功能合并入这些程序。与此同时,一个使用了Lua的程序可以在Lua环境中注册用C语言实现的新函数,由此,就可以向Lua中添加某些无法直接用Lua编写的功能。由于Lua和C++的数据结构和内存机制不一样,所以在交互的时候需要用到C API提供的一个虚拟栈,原创 2017-02-14 13:50:18 · 667 阅读 · 0 评论