众所周知,数组名的值是一个指针常量,即数组第一个元素的地址,它的类型取决于数组元素的类型。此外,作为参数的数组声明,C语言中会自动将作为参数的数组名转换为相应的指针声明。

例:

int strlen(char s[])

{

    /*......*/

}

等价于

int strlen(char* s)

{

    /*......*/

}

       大家应该也听过这样一句话“除了优先级外,下标引用和间接访问完全相同”。

例:

array[subscript]

等价于

*(array+(subscript))


   那么,能认为数组就是指针吗?答案是否定的,从以下方面来解释:

  1. 数组具有确定数量的元素,而指针只是一个标量值;

  2. 编译器用数组名标记数组的属性,只有当数组名在表达式中使用时,编译器才会为其产生一个指针常量,常量即不可修改;而指针是一个变量,可修改。

    一个新的问题,数组名在任何场合都可以认为是指针常量吗?注意以下两个场合:

  a.当数组名作为sizeof操作符的操作数时,sizeof返回的是数组长度,而非指向数组的指针长度;

  b.当数组名作为&操作符的操作数时,产生的是指向数组的指针。



点赞(3)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论