《c专家编程》笔记
TODD911
热爱计算机
展开
-
《c专家编程》笔记--sizeof
#include #include int main(void){ int *p; int *a; a = (int*)malloc(sizeof*p); *a=1; printf("%d\n",*a); free(a); return 0;}上面这段代码,编译运行都没有任何原创 2013-04-01 08:43:01 · 1388 阅读 · 2 评论 -
《c专家编程》笔记--在等待时类型发生了改变
C语言规定,不同类型的数据需要转换成同一类型后才可进行计算,在整型、实型和字符型数据之间通过类型转换便可以进行混合运算(但不是所有类型之间都可以进行转换).当混合不同类型的变量进行计算时,便可能会发生类型转换相同类型的数据在转换时有规则可循: 字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) short型转换为int型(同属于整型)转载 2011-07-29 11:35:25 · 1563 阅读 · 0 评论 -
《c专家编程》笔记--linux内存对齐
在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的 “管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解 更加底层的秘密,“内存对齐”对你就不应该再透明了。一、内存对齐的原因大部分的参考资料都是如是说的:1转载 2011-06-06 21:26:00 · 3097 阅读 · 0 评论 -
《c专家编程》笔记--数组和指针参数是如何被编译器修改的
实参 所匹配的形式参数数组的数组 char c[8][10];(有步长,10char) char(*)[10]; 数组指针指针数组 char *c[15];(无步长) char **c; 指针的指针 数组指针(行原创 2013-04-21 20:46:12 · 1499 阅读 · 0 评论 -
《c专家编程》笔记--bus error(总线错误)
在《C专家编程》中提到了总线错误bus error(core dumped)。总线错误几乎都是由于未对齐的读或写引起的。它之所以称为总线错误,是因为出现未对齐的内存访问请求时,被堵塞的组件就是地址总线。对齐的意思就是数据项只能存储在地址是数据项大小的整倍数的内存位置上。现代的计算机架构中,尤其是RISC架构,都需要字对齐,因为与任意的对齐有关的额外逻辑都会使内存系统更大且更慢。原创 2013-04-17 12:44:09 · 19543 阅读 · 4 评论 -
《c和指针》笔记--自由的c代码
下面的语句有没有问题:int/* comment */x;答案是没有问题。因为c语言中唯一的规则是相邻的标记之间必须出现多个空白字符(或注释)。也许这种语句只有在国际C混乱代码大赛中才会出现,但是能让我们能更深刻地理解C语言。原创 2013-04-24 21:22:22 · 1145 阅读 · 0 评论 -
《c专家编程》笔记--alloca函数
alloca()函数用来在栈中分配size个字节的内存空间,因此函数返回时会自动释放掉空间。alloca函数定义及库头文件如下:/* Allocate a block that will be freed when the calling function exits. */extern void *alloca (size_t __size) __THROW; //从栈转载 2013-04-14 09:49:39 · 1655 阅读 · 0 评论 -
《c专家编程》笔记--解释复杂的声明
右如下声明:int(*func())();int(*func())[];int(*foo[])();解释如下:1,func函数返回一个指向int返回类型,无参数函数的指针2,func函数返回一个int数组指针3,定义了一个函数指针类型的数组,函数没有参数,返回值为int诀窍就是先看声明符func,再看func右边的符号,最后看func左边的符转载 2013-04-13 08:43:19 · 1026 阅读 · 0 评论 -
《c专家编程》笔记--define和typedef的区别
#include #define peach inttypedef int banana;int main(void){ unsigned peach a; unsigned banana b; return 0;}上面的代码中,unsigned banana b;该行编译会出现错误。因为typedef是一种彻底的“封装原创 2013-04-06 13:58:12 · 1388 阅读 · 0 评论 -
《c专家编程》笔记--c语言中算术运算优先级高于移位运算
#include int main(void){ int a = 1; int b = a<<1+2; printf("%d\n",b); return 0;}上面的这段代码,结果是8,而不是4,因为算术运算优先级高于移位运算。原创 2013-04-02 20:56:03 · 2213 阅读 · 0 评论 -
《c专家编程》笔记--深入理解const char*p,char const*p,char *const p
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to转载 2012-08-27 14:19:59 · 1730 阅读 · 0 评论 -
《c专家编程》笔记--如何使用赋值语句拷贝整个数组的值
将数组放到结构体中,直接使用“=”就能将数组中的值全部拷贝到其他相同类型的数组中。#include struct array_tag{ int a[10];};int main(void){ struct array_tag m = {{1,2,3,4,5,6,7,8,9,0}}; int i; for(i=0;i<原创 2013-04-04 08:19:20 · 2505 阅读 · 17 评论