变量名与变量值

研一时,很偶然的翻开谭浩强老先生的《C程序设计》(是师姐的书,俺的老早就卖了,估计当时觉得这本书写得不够好),很偶然的看到关于变量名的一段话:“变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。”

当时很震惊上课的时候居然没有发现这句蛮有深意的话语,可是研一的时候还是没有完全明白,只是知道有这么几个东西:变量名、内存地址、变量值。后来看到指针的地方,说到了“符号表”的这个东东,就更头大了。符号表到底是个什么样子?那个变量名到底放在内存的什么地方?

最近在写驱动,面对的是一个芯片手册,几百个寄存器。现在来看,才发现其实还是蛮简单的。

 

芯片手册大概是这么写的:

地址

名称

0x00

CHIP_ID

0x03

0x01

CHIP_VERSION

0xA2

0x02

……

……

0x03

 

 

 

那么,“符号表”其实就是“名称”的那一列,把所有的名称放在一起就是一个符号表了嘛。

“通过变量名找到内存地址”也很简单,比如说定义一个宏:#define CHIP_ID_ADDR       0x00就可以了。

read函数可以这么写:

xxx_read_val(addr, retval)

{

       retval = *addr;

}

调用的时候也很容易:

xxx_read_val(CHIP_ID_ADDR,&val);

这也可以算是所谓的“通过变量名找到内存地址,,从其存储单元中读取数据了。

那么,比如说定义一个char a = ‘P’;

编译时会为a分配一个地址,是把a和P填在表上,就是:

地址

名称

0x00

CHIP_ID

0x03

0x01

CHIP_VERSION

0xA2

0x02

a

0x50

0x03

……

……

 

好像没啥技术含量

你可能感兴趣的:(C,语言)