首页 | 手机版 | 三国演义 | 三国志 | 史将 | 背景 | 藏书阁
首页 -> 精彩文章 -> c语言的问题(aka 讲座)

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号我听汪中子讲课的一些内容.
那天讲座去的大多是清华,北理工,农大等高校的高年级本科以及研究生,都是想多了解一下这方面的东西.
以上算是我的一些笔记吧,至少让我搞清了一些问题,还不错.



浙ICP备06020153号-1