
linux c
文章平均质量分 88
旋涡小林
这个作者很懒,什么都没留下…
展开
-
C语言的int类型与unsigned int运算的问题。
一、unsigned int变量跟int类型的变量运算时得出的结果是什么类型的?1、先看一个有趣的例子: int a = 3; unsigned int b = -6; printf("%d\n", a+b); if((a+b)>0) { printf("yes\n");原创 2018-01-17 22:13:57 · 22790 阅读 · 13 评论 -
如何判断当前环境的存储方式是大端模式还是小端模式?
一、形象的内存格子。 1、我们都知道数据是可以存储在内存中的,但是它究竟是以一种什么样的形式存储呢?这里我们引入一个“内存格子”来形象化数据的存储。在一个32位计算机中,假设一个格子代表一个字节,则四个字节的单元格是这样的: 0000 0000 0000 0000 0000 0000 0000 0000刚刚好一个字节8个位,四个字节四个格子就是32位了,这也是原创 2018-01-18 16:28:34 · 3006 阅读 · 0 评论 -
C词法陷阱:词法的“贪心法”
一、C语言的词法分析中的“贪心法”导论:C语言中有很多单目运算符号,但是这些单目运算符可以组成很多运算符,当这些运算符的组成产生矛盾时,应该按照:从左到右一个字符地读入,如果这些字符可以组成一个符号,那么可以再读下一个字符,依次类推,这叫做C语言词法分析法中的“贪心法”。`如: int a = 3; int b = 0; b = a---1; printf("T...原创 2019-01-13 11:04:57 · 667 阅读 · 1 评论 -
对C语言中(*(void(*))0)()的理解
一、(*(void(*))0)()的理解**导论:**在一些复杂的代码工程中,经常出现类似于(*(void(*))0)()这种复杂的表达式,今天就带大家慢慢剖析这种表达式,教大家理解。1.一个函数名的本质。函数名的实质就是一个函数的首地址,当执行这个函数的时候,其实就是跳转到相应的地址去执行这个地址下装的二进制代码,可以通过以下程序了解:#include <stdio.h>i...原创 2019-01-13 18:22:15 · 5052 阅读 · 2 评论 -
C语法陷阱:“悬挂”else引发的问题
一、“悬挂”else引发的问题导论:if与else的匹配问题虽然简单,但是很容易由于粗心犯一些比较简单的错误。1.举个例子,想要实现一个功能:如果a=1且b=1时打印出"a=1, b=1",如果a不等于1则打印出"a!=1",则代码如下: int a = 1; int b = 1; if(a) if(b) ...原创 2019-01-13 18:24:45 · 873 阅读 · 0 评论 -
C中必须注意的宏定义细节
1、不能忽略宏定义的空格,如一例子:#define f (x) ((x)-1)当经过预编译以后,由于宏定义的作用仅仅是替换的作用,因此,如果使用f(x)的时候,其替换如下:(x) ((x)-1)(x)这样,就远不能达到要求了。2、宏定义与重命名,若出现以下:`#define C1 struct foo*typedef struct foo* C2C1 a, b;C2 a, ...原创 2019-01-16 10:59:14 · 1432 阅读 · 0 评论 -
深刻理解经典问题:i++与++i
一、printf函数参数顺序问题。1、printf函数的参数的执行顺序问题:我们经常使用printf函数,由于本次实验是在linux下的gcc编译环境下进行,所以对于printf函数的参数,其结果也只使用与当前环境。可先观察例子: int i = 1; printf("i++= %d, i++ = %d, i++ = %d\n",i++, i++, i++);运行结果为:...原创 2019-01-16 17:15:15 · 2107 阅读 · 1 评论