专栏首页C语言入门到精通基础知识 | 每日一练(63)

基础知识 | 每日一练(63)

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

学生:我遇到一些 “搞笑” 的代码, 包含 5["abcdef"] 这样的 “表达式”。这为什么是合法的 C 表达式呢?

小林:数组和下标在 C 语言中可以互换。这个奇怪的事实来自数组下标的指针定义, 即对于任何两个表达式 a 和 e, 只要其中一个是指针表达式而另一个为整数, 则 a[e] 和 *((a)+(e)) 完全一样。这种交换性在许多 C 语言的书中被看作值得骄傲的东西, 但是它除了在混乱 C 语言竞赛之外, 其实鲜有用武之地。

学生:既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又有什么区别呢?

小林:区别在于类型。在标准 C 中, &arr 生成一个 “T 型数组” 的指针, 指向整个数组。在 ANSI 之前的 C 中, &arr 中的 & 通常会引起一个警告, 它通常被忽略。在所有的 C 编译器中, 对数组的简单引用(不包括 & 操作符)生成一个 T 的指针类型的指针, 指向数组的第一成员。

本文分享自微信公众号 - C语言(ycl_printf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基础知识 | 每日一练(64)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    闫小林
  • 5.1 一维数组

    闫小林
  • 5.2 数组的顺序表示和实现

    1、由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。

    闫小林
  • 不看技术文,还想不想去腾讯了

    今天的内容主要是讲解指针数组。这部分内容实际上是要结合数组指针一起讲的,但是由于篇幅的问题,只能拆成两篇来写。今天这篇介绍指针数组,下一篇介绍数组指针。

    谭庆波
  • js--数组方法

    01、concat()---合并数组的方法 02、join(separator)--把数组的所有元素放入一个字符串。元素通过指定的分隔符separator进行分...

    小蔚
  • Shell 数组

    Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,同时Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素...

    企鹅号小编
  • 死磕 java集合之CopyOnWriteArrayList源码分析

    CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉...

    彤哥
  • 死磕 java集合之CopyOnWriteArrayList源码分析

    CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉...

    zhisheng
  • 数组未必一定需从0开始,谈一下非0开始的数组

      谈到数组时,当被问及数组是从什么数开始时,估计大部分程序员都会直接说出数组当然是从0开始的。这个回答当然没有错,现在我们就来了解一下C#中的下限非...

    彭泽0902
  • js数组常用操作

    剑行者

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动