首页 > 代码库 > C语言程序设计现代方法_数组(第八章)

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("\n");    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

 

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