正文

2007\05\222007-05-22 23:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/flyprogram/26067.html

分享到:

1、C语言引入了"可修改的左值"这个术语。它表示左值允许出现在附值语句的左边。这个术语是为了与数组名区分,数组名也用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象。因此,数组名是个左值但不是可修改的左值。标准规定赋值符必须用可修改的左值作为它左边一侧的操作数。通俗的说,只能给可以修改的东西赋值!
2、编译器为每个变量分配一个地址(左值)。这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(它的右值)只有在运行时才可知/如果需要用到变量中存储的值,编译器就发出指令从指定地址读如变量值并将它存于寄存器中。
3、  定义数组时,是从编译器符号表中取的数组名的地址然后加上数组下标(偏移量)来进行访问地址中的内容的。
     对于指针,编译器首先从符号列表中取的这个指针变量的地址,然后再取得该地址中存储的地址,再通过这个地址进行访问。
>>数组和指针的其他区别:
   指针:  保存数据的地址     间接访问数据,首先取得指针的内容,把它作为地址,然后从这个地址提取数据。如果 指针有一个下标[i],就把指针的内容加上i作为地址,从中提出数据。     通常用于动态数据结构     相关的函数为malloc(),free()   通常指向匿名数据

   数组:  保存数据           直接访问数据,a[i]只是简单地以a+i为地址取得数据     通常用于存储固定的树木且数据类型相同的元素      隐式分配和删除      自身即为数据名

   定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋值给指针一个字符串常量进行初始化。(注意只有对字符串常量才是如此。不能指望为浮点数只类的常量分配空间。)如:
    float  *pip = 3.141;    /*  错误!无法通过编译  */

    ANSI C中,初始化指针时所创建的字符串常量被定义为只读。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。

    数组也可以用字符串常量进行初始化:
    char a[] = "gooseberry";
    与指针相反,由字符串常量初始化的数组是可以修改的。

阅读(1794) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册