
c语言
xiaoc024
功不唐捐
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
EOF和'\0'
'\0'是ascII码为0的一个字符(str[length]='\0'和str[length]=0 等价)用在字符串结尾表示字符的结束,要养成在一个自定义的字符串结尾加入'\0'的习惯EOF是文件结束符,多用于文件和输入输出流。原创 2016-06-04 09:39:09 · 885 阅读 · 0 评论 -
补码和unsigned
补码的由来:考虑任意一个负数,比如-24,如何表示呢?不失一般性的,假设我们用一个字节来表示这个负数。我们知道24和0的二进制表示分别是:0001 10000000 0000。根据以下两式: -24 + 24 = 0;1110 1000 + 0001 1000 = 1 0000 0000;因为只用一个字节来表示,所以第二个等式右边的‘1’溢出了。显示出来的结果就是8个0。原创 2016-06-04 14:34:43 · 1481 阅读 · 0 评论 -
大端(BIG-ENDIAN)小端(LITTLE-ENDIAN)
总是记不住大端和小端,就像我记不住阴历和阳历一样。 这次来个一句话总结:小端存储的数据在截取的时候往往会保留下来。x86CPU都是小端的。如下是判断大小端的超简洁一行代码。printf("%s", 1&0xff ? "Little-Endian" : "End-Endian");原创 2016-06-04 11:38:09 · 719 阅读 · 0 评论 -
编译成exe可执行文件的过程
.c—–>.i—–>.s—–>.o—–>.exe .i是编译预处理后的文件,然后经编译器编译后生成汇编代码文件.s,再经过汇编后变成目标代码文件.o,经过链接库文件行成.exe原创 2016-06-04 10:56:54 · 1043 阅读 · 0 评论 -
关于#include
一:<> 和“”的区别。前者只在指定目录去寻找。后者现在当前目录找,找不到再去指定目录 二:#include不是用来引入库的,现在c语言编译器默认引入所有标准库。他的作用只是引入了函数原型。比如#include原创 2016-06-04 10:55:03 · 530 阅读 · 0 评论 -
全局变量和静态本地变量
全局变量不初始化默认为0。本地变量不初始化值不确定。 静态本地变量为全局生存期,本地作用域,在内存中与全局变量挨着放原创 2016-06-04 10:51:17 · 1009 阅读 · 0 评论 -
结构体内存对齐
结构体的sizeof的值总是≥各个成员的sizeof的值的和,等于所有成员中sizeof值最大的一个的sizeof的值乘上成员个数原创 2016-06-04 10:44:52 · 508 阅读 · 0 评论 -
关于strcpy函数
该函数的两个参数内存上不能重叠。因为该函数在现代计算机的实现上要比我们想象的复杂,之所以这样是因为这个函数覆盖面很广,所以一点点效率的提升最终都会造成质的改变。比如cpu是多线程处理器时,程序会分配给不同核不同任务来进行字符串复制。所以如果内存上重叠则会出现问题。char * dst = (char*) malloc (strlen(src)+1);strcpy(dst,src);分配内存时长度别原创 2016-06-04 10:43:14 · 579 阅读 · 0 评论 -
(void *),(void **)和(void***)
多用于强制转换,是一种逻辑上的表达。(void* )表示强制转换的指针是一级指针,(void **)表示是二级指针。他们的结果是一样的。原创 2016-06-04 10:29:56 · 3930 阅读 · 0 评论 -
指针类型的意义
int main(){ char *p; (int *P) char ch[6]="fucko"; p=ch; printf("%c",*(p+1));}得到的字符为u, 即第二个字符, 当把定义指针的char *P替换成int *p时, 输出的却是o, 即第五个字符. 所以可以看出, 定义指针时, 指针前的int或者是char主要的功能是决定你将指针的地址原创 2016-06-04 10:24:43 · 1190 阅读 · 0 评论 -
随机数
一共三步:#include <time.h> /*用到了time函数,所以要有这个头文件*/srand((unsigned) time(NULL)); /*播种子*/int number = rand()%(Y-X+1)+X;/*产生[X,Y]以内的随机整数*/解释下rand()%(Y-X+1)+X,rand()%100,生成[0,99]随机数。rand()%(Y-X+1)生成 [0,Y-X原创 2016-06-04 10:22:13 · 506 阅读 · 0 评论 -
ASCII和ANSI
ASCII:American Standard Code for Information Interchange, 美国标准信息交换代码 ANSI:American National Standards Institute 美国国家标准学会原创 2016-06-04 10:13:08 · 643 阅读 · 0 评论 -
预定义宏陷阱
预定义宏的定义和使用时要小心陷阱#define max(A,B) ( (A) > (B) ? (A) : (B) )max(i++,j++); /* wrong */#define square(x) x*x /* wrong */原创 2016-06-04 09:57:35 · 466 阅读 · 0 评论 -
关于getchar()
一、首先给出《The_C_Programming_Language》这本书中的例子:#include int main( ){ int c; c = getchar(); while (c != EOF) { putchar(); c= getchar(); }原创 2016-06-04 09:43:58 · 1053 阅读 · 0 评论 -
位运算符巧用
使用移位运算符计算一个数的2的次幂的倍数。n << 1 即等价于 n*2n >> 1 即等价于 n/2原理可参考十进制:n << 1 相当于结尾加个0,等价于 n*10。 n >> 1 相当于结尾去掉一位,等价于 n/10。 注:对于右移,各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)使用&运算符判断奇偶print原创 2016-06-04 15:32:54 · 699 阅读 · 0 评论