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

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

1、数组概念

把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。
数组的相关名词:
1)数组元素:构成数组的数据,数组中的每一个数组元素具有相同的名称,不同的下标,可以作为单个变量使用,所以也称为下标变量。
2)数组下标:数组元素的位置的一个索引或指示。
3)数组的维数:数组元素下标的个数,根据数组的维数可以将数组分为一维、二维、三维和多维数组。

2、数组分类

数组可以根据数组中元素类型不同划分为:

数值数组:用来存放数值类型元素
字符数组:用来存放字符
指针数组:用来存放指针(地址)类型元素
结构数组:用来存放结构体类型数据

也可以根据维度划分为一维数组、二维数组和多维数组。

3、一维数组

一维数组:数组内的元素都不是数组,那么这个数组就是一维数组。

(1)定义方式:
                类型说明符  数组名[常量表达式];

类型说明符:任意的一种基本数据类型或构造数据类型。
数组名:用户定义的数组表示符。
常量表达式:代表数组的长度,或者成为数组中元素的个数。
例:        int s[10];     //定义一个包含10个int型变量的数组,数组名是s
注意事项:
1--数组长度可以使一个常量,也可以是常量表达式。
2--数组名的命名严格按照表示符的命名规则。
3--数组名不能和其他变量重名。
4--数组的长度可以使用宏定义。
5--定义数组的时候也可以定义普通变量。

(2)一维数组的初始化
数组的初始化有两种方式,一种是定义的同时进行初始化,另外一种是先定义,然后初始化。
定义的同时初始化格式:
                               类型说明符   数组名[常量表达式]={值,值......值};

定义的同时进行初始化又根据初始化的不同分为完全初始化和部分初始化
例:                        int s[5]={1,2,3,4,5};    //定义的同时进行完全初始化
                               int s[5]={1,2,3}:    //定义的同时进行部分初始化,此时未赋值的元素初始化为0

先定义后初始化:
例:                        int ss[5];              //定义数组
                               ss[0]=1;               
                               ss[1]=12;
                               ss[2]=5;               //分别初始化数组元素
                               ss[3]=16;
                               ss[4]=8;
 (3)一维数组的引用
数组元素访问的一般形式为:
                                              数组名[下标]

例:                                       s[3]    //访问数组s中下标为3的元素
注意:
1--数组下标是从0开始的,也就是说s[3]指的是数组的第四个元素
2--数组下标的最大值是数组长度-1
数组应用之数组的遍历输出:
#include <stdio.h>
int main(){
    int i;
    int s[5]={4,2,5,13,8};
    for(i=0;i<5;i++){
        printf("%d",s[i]);
}
return 0;
}
 
(4)一维数组的存储方式
1)计算机会给数组分配一块连续的存储空间。
2)数组名代表的是数组的首地址,从首地址开始一次存储数组的第1个、第2个......第n个元素。
3)数组中每个元素占用的字节数相同。
4)元素之间的地址是连续的。
5)数组中元素的地址从低到高排列
如下图所示是一维数组x[2]和s[2]在内存中的存储方式:
 
注意:
1--数组x和s的地址可以不连续,但是x或s数组内部的元素地址肯定是连续的。
2--先定义的数组存放高地址
3--数组名代表数组的首地址,也是数组第一个元素的地址
4--数组名是一个常量,是不能被赋值的
(5)一维数组长度的计算
数组长度计算方式;         数组长度=数组占用的总字节数/数组中每个元素占用的字节数
其中数组在内存中占用的总字节数=sizeof(数组名)
例:
     int s[10 ];
     int len;
     len=sizeof(s)/sizeof(int);
(6)数组应用之找数组中的最大值
#include <stdio.h>
int main(){
    int s[10];
    for(int i=0;i<10;i++){
        printf("请输入第%d个数:\n",i+1);
        scanf("%d",&s[i]);  //读取用户输入数据,对对应数组元素赋值
    }
    int max=s[0];  //假设第一个数组元素是最大的
    for(i=1;i<10;i++){
        if(s[i]>max)  //数组元素和当前max比较
       {
         max=s[i];
       }   
    }
    printf("max=%d\n",max);
    return 0;
}
 

4、数组名作为函数参数

数组名作为函数参数和普通的参数不同,主要体现在以下几个方面:
1)数组名作为实参,其对应的形参也必须是类型相同的数组。
2)当数组名作为实参,它所传递的是数组的首地址,属于地址传递,因此,形参数组和实参共享一段内存,编译器不再为形参分配内存。他们所代表的是同一块内存空间,此时,形参中对数组进行的操作会影响到实参数值。
3)实参是数组名时,形参可以用指针。
4)实参数组长度可以和形参数组长度不一致,编译不会出错,但是得到的结果可能和实际不符。
5)形参数组的长度可以不写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值