在C语言中"指针和数组等价"到底是什么意思?
在C语言中对数组和指针的困惑多数都来自这句话。说数组和指针“等价”不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义可以用指针方便的访问数组或者模拟数组。
特别地,等价的基础来自这个关键定义:
一个T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数组第一个成员的指针(除了三种例外情况); 结果指针的类型是T的指针。
这就是说, 一旦数组出现在表达式中, 编译器会隐式地生成一个指向数组第一个成员地指针, 就像程序员写出了&a[0] 一样。例外的情况是, 数组为sizeof 或&操作符的操作数, 或者为字符数组的字符串初始值。
作为这个这个定义的后果, 编译器并那么不严格区分数组下标操作符和指针。在形如a[i] 的表达式中, 根据上边的规则, 数组蜕化为指针然后按照指针变量的方式如p[i] 那样寻址, 如问题6.2 所述, 尽管最终的内存访问并不一样。如果你把数组地址赋给指针:
p = a;
那么p[3] 和a[3] 将会访问同样的成员。
特别地,等价的基础来自这个关键定义:
一个T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数组第一个成员的指针(除了三种例外情况); 结果指针的类型是T的指针。
这就是说, 一旦数组出现在表达式中, 编译器会隐式地生成一个指向数组第一个成员地指针, 就像程序员写出了&a[0] 一样。例外的情况是, 数组为sizeof 或&操作符的操作数, 或者为字符数组的字符串初始值。
作为这个这个定义的后果, 编译器并那么不严格区分数组下标操作符和指针。在形如a[i] 的表达式中, 根据上边的规则, 数组蜕化为指针然后按照指针变量的方式如p[i] 那样寻址, 如问题6.2 所述, 尽管最终的内存访问并不一样。如果你把数组地址赋给指针:
p = a;
那么p[3] 和a[3] 将会访问同样的成员。
【在C语言中"指针和数组等价"到底是什么意思?】相关文章
3. 空指针到底是什么
5. 年底双薪是什么意思?
9. 如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
10. 年底双粮什么意思?
本文来源:https://www.mianshiwenti.com/a13217.html
进入下载页面
﹝在C语言中"指针和数组等价"到底是什么意思?﹞相关内容
- C语言中break与continue的区别
- 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
- 指针和引用有什么区别
- 用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
- 能否解释一下XSS cookie盗窃是什么意思
- Java里面Pass by value和Pass by Reference是什么意思
- abstract是什么意思
- extern是什么意思
- extern在函数声明中是什么意思
- HR们到底是怎么判断潜力的?