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

看下这个程序:

#include <stdio.h>

#define N 10    //

int main()
{
int a[N],i; printf("Enter %d numbers: ",N);
for(i=; i<N; i++)
scanf("%d",&a[i]); printf("In reverse order:");
for(i=N-; i>=; i--)
{
printf("% d ",a[i]);
}
printf("\n"); return ;
}

程序一共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=; i<n; i++)
scanf("%d",&a[i]); printf("In reverse order:");
for(i=n-; i>=; i--)
printf(" %d ",a[i]); return ;
}

你认为有错吗?

对错在于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语言程序设计现代方法_数组(第八章)的更多相关文章

  1. C语言程序设计现代方法_基本类型(第七章)

    C语言支持两种不同的数值类型,整数类型,浮点类型. C语言的整数类型有不同的尺寸.int类型通常为32位,但在老的CPU上可能是16位.有些可能是64位. 因此,int型如果在16位CPU上最大值就是 ...

  2. C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载

    下载地址:点我 C语言仍然是计算机领域的通用语言之一,但现在的C语言已经和当初的时候大不相同了.本书主要的一个目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程,不再强调“手工优化 ...

  3. C语言程序设计-现代方法(笔记3)

    第十三章 字符串 1.字符串字面量(13.1) 字符串字面量:用一对双引号括起来的字符序列.字符串字面量可以像字符常量一样包含转义字序列. 在字符串字面量中小心使用八进制和十六进制的转义序列. 字符串 ...

  4. Java方法_数组

    /* 方法:完成特定功能的代码块.   注意:在很多语言里面有函数的定义,而在Java中函数被称为方法.   方法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { ...

  5. c语言 四种方法调用数组

      #include <stdio.h> /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * * ...

  6. 《C语言程序设计现代方法》第4章 表达式

    C语言的一个特点就是它更多地强调表达式而不是语句,表达式是表示如何计算值的公式. 当表达式包含两个或更多个相同优先级的运算符时,运算符的结合性(associativity)开始发挥作用.如果运算符是从 ...

  7. C语言三种方法调用数组

    #include <stdio.h> /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *** ...

  8. C语言程序设计-现代方法(笔记1)

    第一章 C语言概述 1.C语言的历史(1.1) 起源:贝尔实验室开发的UNIX操作系统的副产品.标准化:C89和C99.基于C的语言:C++,Java,C#,Perl. 2.C语言的优缺点(1.2) ...

  9. C语言程序设计(八) 数组

    第八章 数组 //L8-1 #include <stdio.h> int main() { int score1, score2, score3, score4, score5; int ...

随机推荐

  1. 为什么drop table的时候要在checking permissions花很长时间?

    昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历 ...

  2. 【python cookbook】【数据结构与算法】17.从字典中提取子集

    问题:想创建一个字典,其本身是另一个字典的子集 解决方案:利用字典推导式(dictionary comprehension)可轻松解决 # example of extracting a subset ...

  3. 设置 textarea 默认滑动到底部

    javascript: var textarea = document.getElementById('textarea_id'); textarea.scrollTop = textarea.scr ...

  4. WEB前端常用网站收集

    WEB前端常用网站收集整理 w3school.w3schools 前端里.脚本之家.素材家园 17素材.frontopen NEC更好的CSS方案.一些常用的JS实例 Bootstrap  官网  h ...

  5. Codeforces 741A:Arpa's loud Owf and Mehrdad's evil plan(LCM+思维)

    http://codeforces.com/problemset/problem/741/A 题意:有N个人,第 i 个人有一个 a[i],意味着第 i 个人可以打电话给第 a[i] 个人,所以如果第 ...

  6. java 字符串处理

    第一张: 第二张:

  7. postgresql压力测试工具用法以及参数解读

    pgbench是PostgreSQL自带的一个数据库压力测试工具, 支持TPC-B测试模型, 或自定义测试模型. 自定义测试模型支持元命令, 调用shell脚本, 设置随机数, 变量等等. 支持3种异 ...

  8. 关于easyui的窗口和tab页面不执行js说明

    一直以来群里里面很多人反应,在用tab加载界面的时候,界面里面的js不会执行.今天GodSon在此说明一下原因. 不管是window,dailog还是tab其实质最终都是继承了panel.panel有 ...

  9. Alice and Bob(贪心HDU 4268)

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  10. Fibonacci Again 分类: HDU 2015-06-26 11:05 13人阅读 评论(0) 收藏

    Fibonacci Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...