A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© weizhang00 中级黑马   /  2014-11-21 15:28  /  988 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#define MONTHS 12   
int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
   
int index;
   
for (index = 0; index < MONTHS; index++) {
printf("Month %d has %2d days.\n",index + 1,days[index]);
    }

首先定义宏常量MONTHS 为12
然后以int days[MONTHS]定义数组,实际这个数组为int days[12],数组内容以{}进行包裹,逗号间隔
使用一个简单的for循环进行遍历
关于输出行为index + 1,是因为数组下标是从0开始计算的,即实际上为0~11
days[index]则是通过下标进行数组内容的取出
注意:如果数组未经初始化,那么其中的值是不定的,如果初始化后,但是数值数目少于数组元素个数时,多余的元素会被初始化为0
    int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int index;
    const int count = sizeof(days)/sizeof(days[0]);
    for (index = 0; index < count; index++) {
        printf("Month %d has %2d days.\n",index + 1,days[index]);
    }
    printf("count:%d\n",count);

由于人工计算数组长度容易出错,所以在上面的代码进行了一些修改
定义一个count使用sizeof 数组/sizeof 数组单个元素来计算数组中的元素个数
关于const关键字,由于int count不需要进行更改,所以定义为常量
#define MONTHS 12
    int one[MONTHS] = {5,6,7,8};
    int two[MONTHS];
    two = one;//不允许
    two[MONTHS] = one[MONTHS];//不正确
    two[MONTHS] = {5,6,7,8};//不起作用

在上述代码中,表示了几种数组常见的错误
    int arr[5][12] = {
        {1987},
        {1988},
        {1989},
        {1990},
    };
    int count = sizeof(arr)/sizeof(arr[0]);
    int sizeCount = sizeof(arr[0])/sizeof(arr[0][0]);
    printf("count:%d sizeCount:%d\n",count,sizeCount);
    for (int i = 0;i < count;i++) {
        for (int j = 0; j<sizeCount; j++) {
            printf("arr[%d][%d]:%d\n",i,j,arr[i][j]);
        }
    }
上述代码展示了一个二维数组的初始化到遍历的过程
初始化中,以{}包裹{}并以,分割
当然,和普通数组一样,初始化中未使用的值会初始化为0
另外,还有三维数组,int arr[5][6][7] 可以理解为5个二维[6][7]数组
void testArray(int arr[],int f);
int main(int argc, const char * argv[]) {
    int arr[5] = {2,3,4,5};
    testArray(arr,5);
    int size = sizeof(arr);
    printf("---- %d\n",size);
    return 0;
}
void testArray(int arr[],int f){
    int size = sizeof(*arr);
    for (int i = 0; i < f; i++) {
        printf("arr:%d,%d\n",arr[i],size);
    }
}



上面的代码中函数中使用sizeof无法取得传入数组的完整大小
因为当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。
必须通过附加一个int长度来进行传送

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

1 个回复

倒序浏览
过来看看,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马