
C/C++
平凡的Coder
这个作者很懒,什么都没留下…
展开
-
c语言static用法
一、c程序存储空间布局C程序一般由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:原创 2011-09-27 09:46:11 · 4019 阅读 · 0 评论 -
无符号数与有符号数比较
问题源于一天在群里看到别人问的一个问题:题目1:unsigned int a = -1;char b = -1;printf("%d\n",a==b);输出:?题目2:unsigned short a = -1;char b = -1;printf("%d\n",a==b);输出:?总有些人不加思索的说,这么简单的题,肯定不会相等了。咋一看,确实原创 2013-07-13 20:16:16 · 1144 阅读 · 0 评论 -
C语言中volatile关键字
一、前言——程序的优化1)硬件级别上的优化a.由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。b.在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。2)软件级的优化a.编写代码时由程序员优化b.由编译器进行优化。编译器优化常用的方法有:将原创 2012-05-03 20:19:46 · 824 阅读 · 0 评论 -
补码问题
,正数原码:最高位符号位为0。负数原码:最高位符号位为1,其余位为其对应正数的原码位。6的原码: 0000 0110-6的原码:1000 0110正数反码:与原码一样。负数反码:符号位不变,其余为取反。6的反码: 0000 0110-6的反码:1111 1001正数补码: 与原码相同。负数补码: 其反码加1。6的补码: 0000 0110-6的补码:原创 2013-07-29 19:53:12 · 1711 阅读 · 1 评论 -
数组作为函数实参
数组作为函数实参:C语言中数组作为函数实参时,编译器总是将其解析为指向数组首元素地址的指针(地址调用)原因:我们知道C语言函数的调用有传值和传地址调用。假设C语言对数组采用传值调用(对实参作一份拷贝,传递给被调用函数,函数不能修改实际实参值,而只能改变其拷贝),然后如果拷贝整个数组,则在时间和空间上开销都非常大。而对于函数,只要知道实参数组的首元素的地址,照样可以访问整个数组,所以采用传址原创 2013-07-28 23:30:31 · 14090 阅读 · 0 评论 -
内存对齐问题
对于32位机器,寄存器是32位的,有32根数据线,而内存是按8位编址的,即一个内存单元是8位的。CPU读内存中数据时是一次读32位的即一次读连续4个地址的数据。你可能就会疑问了,像short类型数据占2个字节,假如有一个short型变量a存在地址0x02、0x03中,那CPU怎么读a呢,其实CPU会一次性读从0x00~0x03四个地址中的数据,然后将0x00、0x01中的数据“剔除”掉。好,你可能原创 2013-06-30 20:23:22 · 668 阅读 · 0 评论 -
数组字符串常量的存储
首先来看两段代码:代码1:#includeint main(){ char str[]="12345"; str[2]='A'; return 0;}代码2:#includeint main(){ char *p ="12345"; p[2] = 'A'; return 0;}两段代码都能编译通过,但是代码2执行时会报错。其实,其报错的原因很原创 2013-04-27 23:56:54 · 920 阅读 · 0 评论 -
C语言指针和数组
今天突然发现了个奇怪的问题,下面这段代码竟然输出的值都是一样的,代码如下:#includevoid main(){ char a[10]="012345678"; printf("%d\n",&a[0]); printf("%d\n",a); printf("%d\n",&a);}第一个和第二个printf语句输出地址一样的,能很好理解,但第三个竟然与第二个一样,我就迷茫了原创 2013-04-27 23:37:41 · 596 阅读 · 0 评论 -
C/C++之const关键字
1.const修饰常量功能与#define相同。#define MAX 10;const int MAX = 10;但相比于使用#define定义的宏常量,const常量有数据类型,编译器会对其进行 数据类型检查,而宏常量只是简单的字符替换,编译器不会对其进行数据类型检查。在另一个文件中引用const常量:extern const int MAX; //正确,MA原创 2013-04-05 23:07:20 · 556 阅读 · 0 评论 -
换行符与回车符
首先转一段关于回车和换行的历史。回车和换行 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个原创 2012-05-16 09:35:07 · 465 阅读 · 0 评论