• C语言程序设计现代方法_数组(第八章)


    C语言不要求检查下标的范围。当下标超出范围时,程序可能会执行不可预知的行为。

    看下这个程序:

    #include <stdio.h>
    
    #define N 10    //
    
    int main()
    {
        int a[N],i;
    
        printf("Enter %d numbers: ",N);
        for(i=0; i<N; i++)
            scanf("%d",&a[i]);
    
        printf("In reverse order:");
        for(i=N-1; i>=0; i--)
        {
            printf("% d ",a[i]);
        }
        printf("
    ");
    
        return 0;
    }

    程序一共4次使用到了宏N:在数组a的声明中,在显示提示的printf函数中,还有两个for循环

    可以随意改变N的值,方便,为宏定义的优越性

    在看这一个:

    #include <stdio.h>
    
    int main()
    {
        int i,n;
    
        scanf("%d",&n);
        int a[n];
    
        printf("Ebter %d numbers:",n);
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
    
        printf("In reverse order:");
        for(i=n-1; i>=0; i--)
            printf(" %d ",a[i]);
    
        return 0;
    }

    你认为有错吗?

    对错在于C89与C99的差别

    这种方法为C99的变长数组,可以动态输入

    C99中,可以指定初始化式,如

    int a[15] = {0,0,29,0,0,0,0,0,0,7,0,0,0,0,48};

    由于希望元素2为29,元素9为7,元素14为48,而其他全部为0.对于大数组可能会出错

    C99中可以这样赋值

    int a[15] = {[14] = 48,[9] = 7,[2] = 29};

    除了可以使赋值变得更简短,更易读之外,赋值的顺序不再是问题

    也可以这样 

    int a[15] = {[14] = 29,[9] = 7,[14] = 48};

    括号中的数字为指示符

    指示符必须为整形常量表达式。如果待初始化的数组长度为n则每个指示符的值都必须在0到n-1之间。

    但是,如果数组长度是省略的,指示符可以使任意非负整数;对于后一者情况,编译器将根据最大的指示符推断出数组的长度。

    如,指示符的最大值是23,因此数组的长度是24

    int b[] = {[5] = 10,[23] = 13, [11] = 36, [15] = 29};

    未指定的默认为0

  • 相关阅读:
    maven学习(一)
    maven插件开发(二)
    Maven 插件开发(一)
    vue前后端交互
    vue 操作
    公共事件处理函数js库
    javascript 代码可读性
    你真的已经搞懂JavaScript了吗?
    js中常常容易忘记的基本概念
    面试的时候应该想的问题
  • 原文地址:https://www.cnblogs.com/ccccnzb/p/3995730.html
Copyright © 2020-2023  润新知