——黑马程序员——C语言中一维数组基本概念和初始化

来源:互联网 发布:天猫双11交易数据 编辑:程序博客网 时间:2024/06/05 23:06
-----------android培训java培训、java学习型技术博客、期待与您交流!-----------

C语言中一维数组基本概念和初始化

一、基本概念

数组:一组有序且类型相同数据的集合
数组元素:构成数组的每个数据
数组下标:数组中每个数组元素的位置的索引或指示,下标从0开始
数组的维数:数组元素下标的个数,根据数组的维数可以分为一维、二维、三维和多维数组

二、分类

按存储内容分为:
数值数组:用来存储数值的
字符数组:用来存储字符'a'
指针数组:用来存储指针(地址)的
结构数组:用来存放一个结构类型的数据

一维数组:只用一个下标的数组
一般形式:类型符  数组名 [ 常量表达式 ],如  int a[5],表示定义了一个整型数组,数组名为a,此数组有5个整型元素,5也称作是数组的长度
一维数组初始化:给各个数组元素赋值
初始化方式:

三、一位数组的初始化

1、定义的同时全部初始化

 int a[5] = {0,1,2,3,4};

2、定义的同时部分初始化

int a[5] = {0,1,2};
a数组中有5个元素,只给前3个元素初始化了值,系统会自动给后面2个元素赋值为0
int a[5] = { [3] = 1,[4] = 2 };
a数组中有5个元素,只给下标为3的元素 a[3] 赋值为1,下标为4的元素 a[4] 赋值为2,系统会自动给其他元素赋值为0

3、定义的同时使数组全部赋值为0

int a[5] = {0};
a数组中有5个元素,只给第一个元素赋值为0,系统会自动给其他元素赋值为0
int a[5] = {0,0,0,0,0};
a数组中有5个元素,给数组所有元素赋值为0

4、当对于数据的个数已经确定是,可以不指定数组长度

int a[ ] =  { 0,1,2,3,4 }

5、先定义然后初始化

int a[5];
a[0] = 0;
a[1] = 1;
a[2] = 2;
a[3] = 3;
a[4] = 4;
代码如下:
#include <stdio.h>#include <stdlib.h>int main(){    printf("一维数组初始化方式:\n");    //1、定义同时初始化    int a[5] = {0,1,2,3,4};    int i;    //遍历数组中的每个元素    printf(" 1、定义同时初始化\n");    for(i = 0; i < 5; i++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",i,a[i]);    }            //2、定义同时部分初始化    int a1[5] = {0,1,2};    int j;    //遍历数组中的每个元素    printf(" 2、定义同时部分初始化\n");    for(j = 0; j < 5; j++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",a1[j]);    }            //2、定义同时部分初始化    int a2[5] = {[3] = 1,[4] = 2};    int k;    //遍历数组中的每个元素    printf(" 2、定义同时部分初始化\n");    for(k = 0; k < 5; k++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",a2[k]);        }        //3、定义同时全部初始化为0    int a3[5] = {0};    int m;    //遍历数组中的每个元素    printf(" 3、定义同时全部分初始化为0\n");    for(m = 0; m < 5; m++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",a3[m]);    }            //3、定义同时全部初始化为0    int a4[5] = {0,0,0,0,0};    int n;    //遍历数组中的每个元素    printf(" 3、定义同时全部分初始化为0\n");    for(n = 0; n < 5; n++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",a4[n]);    }            //4、不指定数组的长度    int b[] = {0,1,2,3,4};    int t;    //遍历数组中的每个元素    printf(" 4、不指定数组的长度\n");    for(t = 0; t < 5; t++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",b[t]);    }         //5、先定义后初始化    int a5[5];     int r;    a5[0] = 0;a5[1] = 1;a5[2] = 2;a5[3] = 3;a5[4] = 4;    //遍历数组中的每个元素    printf(" 5、先定义后初始化\n");    for(r = 0; r < 5; r++)    {//打印数组元素的每个值printf("数组元素的值为:%d\n",a5[r]);    }       system("pause");return 0;}
测试结果为:



注意:如果一个数组不初始化,里面的值会是垃圾值,因此数组使用之前一定要初始化,建议定义的时候就初始化

测试代码:
#include <stdio.h>#include <stdlib.h>int main(){    //定义一个数组但不初始化    int a[5];    int n;    //遍历数组中的每个元素    for(n = 0; n < 5; n++)    {//打印数组元素的每个值    <span style="white-space:pre"></span>printf("\n");printf("  数组元素的值为:%d\n",a[n]);    }system("pause");return 0;}
测试结果:

四、一位数组的存储方式

计算机给数组分配一块连续的存储空间

测试代码:
#include <stdio.h>#include <stdlib.h>int main(){    int i;    int j;    //定义一个整型数组并初始化    int a[5] = {0,1,2,3,4};    //定义一个字符数组并初始化    char ch[3] = {'a','b','c'};    //打印整型数组a[5]的元素地址    printf("数组a[5]每个元素的地址为\n");    //用for循环取数组元素的地址    for(i = 0; i < 5; i++)    {//打印出数组每个元素的地址printf("  %p\n",&a[i]);    }            //打印字符数组的元素地址    printf("数组ch[3]每个元素的地址为\n");    //用for循环取数组元素的地址    for(j = 0; j < 3; j++)    {//打印出数组每个元素的地址printf("  %p\n",&ch[j]);    }system("pause");return 0;}
测试结果:

数组名代表数组的首地址,从首地址的位置一次存入数的每一个元素

每个元素占用相同的字节数,所占字节数取决于数组的类型

每个数组元素之间的地址是连续的

测试代码:
#include <stdio.h>#include <stdlib.h>int main(){      int i;      int j;    //定义一个整型数组并初始化    int a[5] = {0,1,2,3,4};    //定义一个字符数组并初始化    char ch[3] = {'a','b','c'};    //打印整型数组a[5]的首地址printf("数组a[5]的首地址为:%p\n",&a);        //打印整型数组a[5]的元素地址printf("数组a[5]每个元素的地址为\n");    //用for循环取数组元素的地址    for(i = 0; i < 5; i++)    {//打印出数组每个元素的地址printf("  %p\n",&a[i]);    }            //打印字符数组的首地址    printf("数组ch[3]的首地址为:%p\n",&ch);        //打印字符数组的元素地址    printf("数组ch[3]每个元素的地址为\n");    //用for循环取数组元素的地址    for(j = 0; j < 3; j++)    {//打印出数组每个元素的地址printf("  %p\n",&ch[j]);    }system("pause");return 0;}
测试结果:

结论:

数组名是一个常量,存储的是数组的首地址,数组名的地址和数组元素的第一个元素地址相同!
0 0
原创粉丝点击