• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C 语言基础教程(我的C之旅开始了)[十]

c语言 搞代码 4年前 (2022-01-06) 136次浏览 已收录 0个评论

27. 表达式(Expression)

   表达式由运算符和操作数组成。单独一个操作数是最简单的表达式。请看以下例子:

                     9
                    -4
                    +5
                 3 + 6
       a * ( b/c – d )
             e = 9 / 3
           f = ++e % 3

表达式中的表达式称为子表达式。例如:b/c 是 a * ( b/c – d ) 的子表达式。

    每个表达式都有一个值,这是 C 语言的一个重要属性。显而易见的,9 和 -4 的值就是 9 和 -4,3 + 6 的值就是 9 。e = 9 / 3 的值是 3 ,也就是是 = 号左边的变量 e 被赋予的值。我们再来看看下面这个表达式:

        8 – (a = 2 * 3)

想想看,它的值是多少?没错,就是 2 。但是,不推荐使用这种表达式,因为可读性太差。

28. 数组基础(上)
 

1. 数组简介

    数组(Array)由一系列同种数据类型的元素组成。编译器可以从数组声明中知道数组中元素的数目,以及这些元素的数据类型。例如:

       double dbl[20];        /* 包含 20 个 double 类型元素的数组 */
       int      c[12];        /* 包含 12 个 int 型元素的数组      */
       char    ch[40];        /* 包含 40 个 char 型元素的数组     */

方括号 [] 表明它们是数组,[] 里的数字表明数组包含的元素数目。

    数组中的元素是相邻的,初始化之前,元素的值可能是随机的。下图形象地表现了这种相邻关系。

       

使用数组名和下标(subscript number 或 index)就可以访问特定的元素。下标始于 0,止于 n – 1。例如:c[0] 是数组 c 的第一个元素,而 c[11] 是它的最后一个元素,也就是第 12 个元素。

 

2. 初始化

        int c[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

如上所示,我们使用大括号中一系列逗号分隔的值来初始化数组。我们把这个称之为初始化列表。大括号是必须的!逗号和值之间的空格可有可无。初始化后,数组 c 的第一个元素 c[0] 的值为 0,以此类推。

    下面的小程序输出数组 iarr 中所有元素的值。

        #include <stdio.h>

        int main(void)
        {
            int iarr[4] = { 0, 1, 2, 3 };
            int i = 2;

            printf(“%d\n”, iarr[0]);    /* 输出 0 */
            printf(“%d\n”, iarr[1]);    /* 输出 1 */
            printf(“%d\n”, iarr[i]);    /* 输出 2 */
            printf(“%d\n”, iarr[1+2]);  /* 输出 3 */

            return 0;
        }

如上所示,访问数组元素时,[] 里的可以是常量,可以是变量,也可以是表达式。[] 里还可以是返回值为整型的函数调用。总之,只要 [] 里的值是整数类型都可以。

    注意,上面的程序,如果把 int iarr[4] = { 0, 1, 2, 3 }; 改成 int iarr[4];(即没有初始化),则它里面的元素的值是随机的,也就是本来就存在于那段内存空间的值。如果改成 int iarr[4]; 后再把它放在 int main(void) 之前,则它里面的元素的值都是 0。具体原因我在后续的教程会说明。

    如果初始化列表中的值的个数少于数组元素个数,则余下的元素都会被初始化为 0。例如:

        int iarr[4] = { 0, 1 };

iarr[0] 和 iarr[1] 分别为 0 和 1;iarr[2] 和 iarr[3] 都被初始化为 0。注意,初始化列表中的值的个数可以少于数组元素个数,但是超过数组元素个数却是不对的!

    初始化数组时,[] 里可以留空。例如:

        int iarr[] = { 1, 2, 3 };

编译器会算出初始化列表中的值的个数,然后构造包含那么多个元素的数组。如上例,编译器会算出列表中一共有 3 个值,然后把 iarr 构造成包含 3 个元素的数组。例如:

        #include <stdio.h>

        int main(void)
        {
            int iarr[] = { 1, 2, 3 };

            printf(“%d\n”, iarr[0]);    /* 输出 1 */
            printf(“%d\n”, iarr[1]);    /* 输出 2 */
            printf(“%d\n”, iarr[2]);    /* 输出 3 */

            return 0;
        }

我们可以用以下表达式算出 iarr 中元素的个数:

        sizeof iarr / sizeof iarr[0]

其中,sizeof iarr 算出数组 iarr 占用的内存大小,sizeof iarr[0] 算出 iarr[0] 占用的内存大小(也就是数组 iarr 中每个元素占用的内存大小),它们相除就得出 iarr 的元素个数。sizeof 是一个运算符,具体用法我以后会说。

29. 数组基础(下)
 

1. 指派初始值(Designated Initializers)

    指派初始值这个特性是 C99 增加的,它允许我们直接初始化数组中特定的元素。C99 以前,如果我们要初始化数组中的某个元素,如第三个元素,必须同时初始化它之前的元素。例如:

        int iarr[10] = { 0, 0, 300 };

而 C99 中,我们可以这样初始化特定的元素:

        int iarr[10] = { [2] = 300 };  /* 指派初始化 iarr[2] 为 300 */

来源gaodai.ma#com搞##代!^码网

其余的元素都会被初始化为 0 。下面我们来看一个小程序。

        #include <stdi

以上就是C 语言基础教程(我的C之旅开始了)[十]的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C 语言基础教程(我的C之旅开始了)[十]

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址