众所周知,数组名的值是一个指针常量,即数组第一个元素的地址,它的类型取决于数组元素的类型。此外,作为参数的数组声明,C语言中会自动将作为参数的数组名转换为相应的指针声明。
例:
int strlen(char s[])
{
/*......*/
}
等价于
int strlen(char* s)
{
/*......*/
}
大家应该也听过这样一句话“除了优先级外,下标引用和间接访问完全相同”。
例:
array[subscript]
等价于
*(array+(subscript))
那么,能认为数组就是指针吗?答案是否定的,从以下方面来解释:
数组具有确定数量的元素,而指针只是一个标量值;
编译器用数组名标记数组的属性,只有当数组名在表达式中使用时,编译器才会为其产生一个指针常量,常量即不可修改;而指针是一个变量,可修改。
一个新的问题,数组名在任何场合都可以认为是指针常量吗?注意以下两个场合:
a.当数组名作为sizeof操作符的操作数时,sizeof返回的是数组长度,而非指向数组的指针长度;
b.当数组名作为&操作符的操作数时,产生的是指向数组的指针。
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:729 |
C语言训练-阿姆斯特朗数 (C语言代码)浏览:877 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:614 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:593 |
【明明的随机数】 (C++代码)浏览:814 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:560 |
WU-链表数据求和操作 (C++代码)浏览:1352 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:807 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:556 |
核桃的数量 (C语言代码)浏览:887 |