黑马程序员--C语言基础--数组

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

数组

今天学习了数组的知识,课上同学们也积极思考,在“生成10个不重复的随机数的数组”这道题中,同学的解决办法都很好。后来老师又进行了点评和优化。受益匪浅。

一、数组的基本概念

     在程序中常常需要定义很多同一类型的变量,那么为例简化此操作,将这些相同类型的变量用一种特定的数据结构进行存储。将他们按照一定顺序存储在一起,用一个名字和一个序号进行表示,它就是数组。
     例如:
     int num1, num2, num3, num4, …;
     int num[4];
     很显然使用数组可以大大简化代码。
     不仅如此,数组的序号特征可以实现很多非常灵活的数据结构。
     相关概念
     数组:即同一数据类型的变量的集合,其中每一个数据按照指定顺序存储在一段连续的内存上。
     数组元素:数组中存储的单个数据
     下标:数据存储的序号
     维度:数组下标的层级数。

二、数组的分类

     1)按照存储数据的类型分:

           数值数组
           字符数字
           指针数组
           结构数组

     2)按照维度分:

           一维数组
           二维数组
           多维数组

三、一维数组的存储方式

     数组的存储模型

     存储方式
     1)连续存储空间
     2)大小有类型与个数决定
     3)元素大小相同
     4)数组名是首地址
     5)每一个元素使用偏移

     一维数组元素地址

     1)数组与数组间地址不一定连续
     2)数组内元素是连续的

四、数组名作为函数参数

     将数组名作为函数参数

     1)函数的形参需要与数组一致
     2)数组名的传递为地址传递
     3)一般函数参数有两个,一个是数组名,另一个是数组长度
     4)传递数组名,可以在函数结束后保留数组处理的结果

代码练习:

1.创建长度为10的随机数字数组,并且数字不能重复

//  main.c
//  10-练习-创建随机数字数组
//
//  Created by george on 15-4-4.
//
//

#include <stdio.h>
#include <stdlib.h>

#define LEN 10

int length = 0;
int array[LEN];

// 写一个函数,判断数字是否在函数中
// 判断数字num在数组array中的下标,如果不存在返回-1
int indexOf(int num) {
    for(int i = 0; i < length; i++) {
        if(array[i] == num) {
            return i;
        }
    }
    return -1;
}


int main(int argc, const char * argv[]) {
    int num;
    
    while(length < 10) {
        num = arc4random_uniform(10);
        if(indexOf(num) == -1) {
            array[length++] = num;
        }
    }
    for (int i = 0; i < 10; i++) {
        printf("%d\n", array[i]);
    }
    
    
    
    return 0;
}

2.上题同学的另一种思路算法(另一种思路)

//
//  main.c
//  创建随机数字的数组
//
//  Created by 传智播客 on 15-4-4.
//
//题目内容:创建一个随机数组

#include <stdio.h>
#include<stdlib.h>

int main(int argc, const char * argv[]) {

    int random;
    int Number=1234567890;
    int repeat[10]={0};
    int number[10]={0};
    for(int i=0;i<10;i++){
        
        while(1){
                 random=arc4random_uniform(10);
                if(repeat[random]==0){
                            repeat[random]=1;
                                break;
                    }
                }
        number[random]=Number%10;
        Number/=10;
    }
    
    
    
    for(int i=0;i<10;i++)
        printf("%d\n",number[i]);
    return 0;
}

3.关于数组名作为函数的参数的一些说明

//  main.c
//  14-数组名作为函数参数的补充-重要
//
//  Created by apple on 15-4-4.
//
//

#include <stdio.h>

void func(int nums[], int length) {
    // printf("%lu\n", sizeof(nums));
}

int main(int argc, const char * argv[]) {
    // 1,函数参数的写法
    //      如果数组名作为函数参数,可以直接写成指针形式
    // 2,数组长度
    //      sizeof可以计算出数组的长度
    //      一维数组作为函数参数的时候,方括号的数字可以省略
    //      传入的数组长度信息会丢失
    //      使用数组名作为函数参数的时候,应该附带一个int参数表示数组的长度
    // 3,(扩展)
    //   数组名是一个常量
    //   指针是一个可以改变的量
    //   如果数组名传递给函数后,函数内部使用加[]的形式修改,那么内外均改
    //   如果只是对函数中数组名作整体赋值,那么函数中就表示的是另外一个数组,与原数组无关
    
    
    int nums[10];
    int nums1[10];
    
    // nums = nums1;
    
    
    func(nums, 10);
    
    
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值