C语言数组

目录:
一、数组的定义
二、一维数组的创建和初始化。
三、一维数组的使用。
四、一维数组在内存中的存储
五、一维数组的指针访问
六、二维数组的创建和初始化
七、二维数组的使用
八、二维数组在内存中的存储
九、二维数组的指针访问
正文

一、数组的定义
数组是一组相同类型元素的集合。
二、一维数组的创建和初始化
1、数组的创建

       type_t   arr_name [const_n];
//数组元素类型 + 数组名 + 数组大小(常量表达式)
//正确写法:
       int arr[10];//√
       int arr[5 + 5];//√
//错误写法:
       int n = 10;
       int arr[n];//error 方括号内必须是常量或者常量表达式

2、数组的初始化
在创建数组的时候,会给数组一些合理的初始值。

//正确写法:
//1.不完全初始化
         int arr[10] = {1,2,3}//前三个元素为1,2,3,后面七个默认为0;
         int arr[] = {1,2,3};//通过后面初始化的123可以确定出数组大小为3
//2.完全初始化
         int arr[4] = {1,2,3,4};
//错误写法:
         int arr[0];//error 创建了一个数组但又是0个元素,模棱两可,
         int arr[];//error 没有告诉编译器要创建多大的空间

有关字符数组的创建:

//1、
         char arr[3] = { 'a', 98, 'c' };//b的ASCII值为98
         char arr2[] = { 'a', 'b', 'c' };//arr arr2 这两数组效果一样
//2、         
         char arr3[] = "abcdef";//七个元素,隐藏着\0
         char arr4[] = { 'a', 'b', 'c','d','e','f' };//6个元素
         char *p = "abcdef";//把首字符a的地址放在p,*p则为a; 
         printf("%s\n", arr3);//abcdef
         printf("%s\n", arr4);//abcdef烫烫烫、、、随机值,没有\0 停不下来
         printf("%s\n", p);//abcdef

这里写图片描述

三、一维数组的使用
下标引用操作符: [ ]

    int arr[10] = {0};//十个元素初始化成0;
    printf("%d\n",arr[0};//打印第一个元素。数组下标从0开始
    int sz = 0;//数组的大小
    int sz = sizeof(arr)/sizeof(arr[0]);//整个数组大小除以一个元素的大小

四、一维数组在内存中的存储

在数组中。随着下标的增长,元素的地址也有规律的递增,所以在内存中数组是连续存储的。
这里写图片描述
五、一维数组的指针访问
1、指针的初步介绍
(1)指针可以理解为一个变量,是一个专门用来存放地址的变量
(2)解引用操作:找到指针所指向的变量

int n = 10;
int *p = &n;//把n的地址给p
*p = 20;//解引用操作

2、一维数组的指针访问

 int main()
 {
    int arr[10];
    int sz = sizeof(arr)/sizeof(arr[0]);
    int *p = arr;//数组名arr表示首元素地址;把首元素地址给指针变量p
    for(i=0; i<sz; i++)
    {
        *(p+i) = i;//*p即为首元素,*(p+i)即为第i个元素
    }
    for(i=0; i<sz; i++)
    {
        printf("%d ", *(p+i));

六、二维数组的创建和初始化
1、二维数组的创建

    int arr[3][4];//三行四列
    char arr1[3][5];//三行五列
    double arr2[2][4];//两行四列

2、二维数组的初始化
在初始化的时候注意:
行可以省略,列不可以;

int arr[3][4] = { 1, 2, 3, 4, 5 };
//   1 2 3 4
//   5 0 0 0
//   0 0 0 0
int arr1[3][4] = { { 1, 2 }, 3, 4, 5 };
//   1 2 0 0
//   3 4 5 0
//   0 0 0 0
//int arr2[3][4] = { { 1, 2 }, 3, { 4, 5 } };//error

int arr3[3][4] = { { 1, 2 }, { 3 }, { 4, 5 } };
int arr4[][4] = { { 1, 2 }, { 3 }, { 4, 5 } };//这两数组效果一样
//   1 2 0 0
//   3 0 0 0
//   4 5 0 0

七、二维数组的使用
二维数组的使用类似于一维数组,用下标操作符。
不同于一维数组的是数组元素个数的计算:
行数:sizeof(arr)/sizeof(arr[0]);//整个数组大小除以第一行的大小
列数:sizeof(arr[0])/sizeof(arr[0][0]);//第一行的大小除以第一个元素的大小
八、二维数组在内存中的存储
二维数组在内存中也是连续存放的。
这里写图片描述
由此图也可以看出,数组在创建的时候不能省略掉列,如果省略到列的个数,就不知道每一行有几个元素,就无法确定第二行的位置。只有每一行的个数确定了,才能计算出下一行放在那里。
九、二维数组的指针访问

int main()
 {
    int arr[][4] = {{1,2},{3},{4,5}};
    int i = 0;
    int j = 0;
    //int *p = arr;arr是首元素地址,但在二维数组中,arr是第一行的地址
    int *p = &arr[0][0];
    for(i=0; i<sizeof(arr)/sizeof(arr[0][0]); i++)
    {
        printf("%d ", *(p+i));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值