• 第十章 数组和指针


    一 数组

    数组由一系列相同的元素构成。

    告诉编译器需要一个数组的方式叫数组声明(array declaration),声明需要告诉编译器数组元素的个数和类型。

     初始化

    int main(void)
    
    {
    
      int powers[8] = {1,2,4,8,16,32,64,128};
      ... }

    未初始化的数组元素值为内存中的实际值,此值是不确定的,不过如果初始化了部分数组,编译器会将剩下的元素初始化为0.

    一种确定数组长度的方法:sizeof(powers)/sizeof(powers[0]),这种方法无法测定出有效数组元素的长度。

    指定初始化项目(C99)

    C99新特性:此特性允许选择对某些元素进行初始化。比如,只对数组最后一个元素初始化:

    //传统语法:
    int arr[6] = {0,0,0,0,0,212};
    //C99语法:
    int arr[6]={[5]=212};
    //C99语法高级用处:结果为:31 29 0 0 31 30 31 0 0 0 0 0 0 
    int days[12] = {31,28,[4]=31,30,31,[1]=29};

     赋值

    声明后的数组可借助其索引(即下标)对其进行赋值

    错误的赋值方式:

    #define SIZE 5
    int main(void)
    {
      int oxen[SIZE] = {5,3,2,8};
      int yaks[SIZE];
      yaks = oxen;//不允许
      yaks[SIZE] = oxen[SIZE];//不正确
      yaks[SIZE] = {5,3,2,8];//不起作用      
    }

     数组边界

    处于C信任程序员的原则,C编译器不检查索引的合法性。以让C程序的运行速度更快。

    减少程序员出错可以记住一点:数组从0计数,以及在数组声明中使用符号常量,以保证整个程序中数组大小始终一致。

    指定数组大小

    int n =5;//可以
    int m=8;//可以
    float a1[5];//可以
    float a2[5*2+1];//可以
    float a3[sizeof(int)+1];//可以,sizeof表达式被认为是一个整数常量,而const值却不是整数常量
    float a4[-4];//不可
    float a5[0];//不可
    float a6[2.5];//不可
    float a7[(int)2.5];//可以
    float a8[n];//c99之前不可以
    flaot a9[m];//c99之前不可以

    C99允许这两个声明,但这创建了一种新数组,称为变长数组(variable-length array) 简称VLA。VLA的好处:更适合做数值运算;限制:声明时不能初始化。

  • 相关阅读:
    如何让一个浮动垂直居中:两种方式!带来效果~~~~~~
    rgba()和opacity之间的区别(面试题)
    常用浏览器内核!IE,Chrome ,Firefox,Safari,Opera 等内核
    有关Option.inSamplSize 和 Compress 图片压缩
    Android App 启动 Activity 创建解析
     (转)windows一台电脑添加多个git账号
    Handler向子线程发送数据
    Android Touch事件分发
    int 转十六进制
    JVM client模式和Server模式
  • 原文地址:https://www.cnblogs.com/chitanta/p/9440252.html
Copyright © 2020-2023  润新知