您当前的位置:首页 > 计算机 > 编程开发 > C语言

可以把另外一个地址赋给一个数组名吗?

时间:12-30来源:作者:点击数:

不可以,尽管在一个很常见的特例中好象可以这样做。

数组名不能被放在赋值运算符的左边(它不是一个左值,更不是一个可修改的左值)。一个数组是一个对象,而它的数组名就是指向这个对象的第一个元素的指针。

如果一个数组是用extern或static说明-的,则它的数组名是在连接时可知的一个常量,你不能修改这样一个数组名的值,就象你不能修改7的值一样。

给数组名赋值是毫无根据的。一个指针的含义是“这里有一个元素,它的前后可能还有其它元素”,一个数组名的含义是“这里是一个数组中的第一个元素,它的前面没有数组元素,并且只有通过数组下标才能引用它后面的数组元素”。因此,如果需要使用指针,就应该使用指针。

有一个很常见的特例,在这个特例中,好象可以修改一个数组名的值:

    void f(chara[12])
    {
        ++a;  /*legal!*/
    }

秘密在于函数的数组参数并不是真正的数组,而是实实在在的指针,因此,上例和下例是等价的:

    void f(char *a)
    {
        ++a;  /*certainlylegal*/
    }

如果你希望上述函数中的数组名不能被修改,你可以将上述函数写成下面这样,但为此你必须使用指针句法:

    void{(char *const a)
    {
        ++a;  /*illegal*/
    }

在上例中,参数a是一个左值,但它前面的const关键字说明了它是不能被修改的。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门