最后的圣洁

博客园 首页 新随笔 联系 订阅 管理

      这几天在复习c语言的一些东西,刚刚开始就发现了许多了第一此不同的东西。虽说做项目不会太用到语言,但是作为一门经典语言还是很有必要深入的,尤其是当需要深入学习一些算法的东西时,就应该再次学习。C语言描述算法还是具有其一定的优势的。好了,闲话不多说进入正题:

1、   数值常量和符号常量: 数值常量是指存入计算机的一些数据,例如整数,字符等统称为数值常量。符号常量是指数值常量通过定义宏定义之后的得到的。例如:

    #define  PRICE    30;  其中PRICE为符号常量,30为数值常量。当我在定义一个变量的时候,其实是想内存申请一块空间,然后将符号常量或者数值常量存进去。在编译的时候符号常量会被自动替换为数值常量存在于计算机的物理设备上。因此,可以理解为符号常量只是数值常量的一个假名。

2、 定义变量,例如 :char  a  = ‘A’; 这是一个赋值表达式。不深入理解,可能就这样一谈而过了!而今天作为深入学习,个人感觉应该从幅值符号的两边理解,其实根据c语言的运算级,我们也应该这样理解,即赋值运算最后进行。“char a”我们可以理解为两个部分,首先char表示我们要申请一个字符型的空间,然后将 将这个空间的地址得到,但是由于十六位的地址难以表达,因此我们为其取了假名a 代替这个地址,当我们操作a的时候,实际上就是操作该段地址,而只要我们能得到地址,那么在该地址存在的数据也能得到。即a就是地址,但是a不是地址的指针。 例如我们在printf函数种可以:putchar(‘A’),也可以putchar(a);而赋值号后面的 ‘A’可以理解为,系统将一个数值常量,放在我们干菜申请的那个位置上。可能这个例子不够明显,那么我们接着用字符串的例子来说明问题。char * s=”china“,首先由一个地址他的假名为s 在其中存贮一个字符串的地址。”china“系统会自动申请一段内存并将首地址得到。并将其存在s中。在输入函数中scanf("%s",s)中,s已经是一个地址常量了,因此不需要再使用去地址符。char[]  a ="dfag ",数组名也是地址常量。

      问题随之而来既然s是一个地址常量那么在printf函数种printf(”%s“,s)是否正确,答案是去确定的,因此我们可以推断在函数pintf和scanf中其实都是对地址进行的操作。可以这样来看,一定对这个表达式有印象a= *(&a),我们通过假名的取地址运算可以得到地址,然后利用在用指针运算 得到在该地址上对应的数据。因此putchar(‘A’),也可以putchar(a)两个函数能够得到一样的结果。

 总之 我们在定义变量时候数据类型冠军关键字是开辟内存,a是来为这段内存的地址取假名。数字直接存入,字符通过ASCII转换成数数字存一数值常量形式存入,通过’‘来表示他是字符,需要转换,字符算通过 “”来表示他是字符串,需要重新申请内存。数组通过[]表示他是数组,需要连续的内存,数组名是地址常量。由于其是连续的内存,所以可以通过他的标号来周到每个地址,继而实现随机存取。由于int a和int a [] 不一样,如果是 前者中的a,那么就是取了假名,我们需要用&才能打得到地址,而后者中得a没有取假名,而是以宏的方式定义了a就是地址常量。既然int a中的a 和int a[10]中的 都是表示地址,为什么会出现不同,?因为没有看过c语言的源码,所以我大胆的猜测是 如果在以后需要调用a 中得数据。对于int a实现的运算是 *(&a),而对于int a [10]的运算应该是*a,而这些东西都被屏蔽在c语言的之下了!

 

posted on 2012-11-25 22:33  最后的圣洁  阅读(211)  评论(0编辑  收藏  举报