c语言的问题(aka 讲座)
作者:拉格浪日 标签:技术 | 阅读次数:83 |
![]() ![]() ![]() |
| ![]() ![]() ![]() |
1.
指针例子: int *p=(void)0x0000ffff :初始化指针的内容,int类型的指针其值为4个字节的0x0000ffff *p=0xffff0000:指针所指地址的内容是0xffff0000 2. 结构例子: struct a { char:ch; int :a; };要考虑对齐的问题。 在dev c++下编译后的sizeof 结构a 的对像为8字节. 数据对齐 对齐是跟数据块在内存中的位置相关的话题。如果一个变量的内存地址正好是它长度的整数倍,它就被 称作是自然对齐的。举例来说,对于一个32位类型的数据,如果它在内存中的地址刚好可以被4整除(也 就最低两位为0),那它就是自然对齐的。也就是说,一个大小为2n字节的数据类型,它地址的最低有效 位的后n位都应该为0。 对齐有big endian 和 little endian两种 e.g. int x=1; if(*(char *)&x==1) printf("little endian") else printf("big endian") LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 低位值小,就应该放在内存地址小的地方,也即内存地址低位 反之,高位值就应该放在内存地址大的地方,也即内存地址高位 BE big-endian 最直观的字节序 地址低位存储值的高位 地址高位存储值的低位 为什么说直观,不要考虑对应关系 只需要把内存地址从左到右按照由低到高的顺序写出 把值按照通常的高位到低位的顺序写出 两者对照,一个字节一个字节的填充进去 3. c语言的难点。 1.指针与内存;2.运行时特点 5.linux信号函数分析: void《返回值void *》(*signal《函数名signal》 int sign《大函数的参数1 sign》,void(* func) (int《func的参数》))(int《参数〉); 4. c 的开发工具: Tornado 2(变量地址查看方便) ,hexedit(linux 下 16 进制编辑器),Source Insight 代码分析 5. 局部变量产生时间:运行时.不同于全局变量,没有在开始时就出现在执行程序的映像里. 变:内存中的地址单元. extern int a ;声明其他文件中的变量 6. typedef 定义真正类型 define 定义常量表达式或者类型别名例如: #define UINT int 7. 几个概念 (1) 可见范围,编译时(2)生存期,运行时 指针所指对象的解释由指针的类型决定 void (* func[3])(void); 定义函数指针数组. 可以做这样的操作:func[0]=func1; ------------------------------------------------------------- 以上是9月9号我听汪中子讲课的一些内容. 那天讲座去的大多是清华,北理工,农大等高校的高年级本科以及研究生,都是想多了解一下这方面的东西. 以上算是我的一些笔记吧,至少让我搞清了一些问题,还不错. |