C语言数组

定义

  • 数组是用来存储一系列相同类型数据的集合

静态数组

  • 静态数组内存分配是连续的(即地址连续),最低的地址对应首元素,最高的地址对应末尾元素。在栈内存上分配了固定大小,在运行时这个大小不能改变。在函数执行完以后,系统自动销毁;
  int a[5] = {1,2,3,4,5};
或 int a[] = {1,2,3,4,5};//定义时地址分配完毕,数组长度固定
  • 定义一个静态数组实例
# include <stdio.h>
int main(void)
{int a[5] = {1, 2, 3, 4, 5};int i;for (i = 0; i < 5; i++ ){printf("%d\n", a[i]);}return 0;
}

动态数组

  • 动态数组的内存空间是从堆(heap)上分配(即动态分配)的,当程序执行到分配内存语句时,才为其分配存储空间。运行结束后,程序员需要free自行销毁释放分配的空间。
  • 定义一个动态数组实例
#include <stdio.h>
#include <stdlib.h> //使用malloc函数需要调用此头文件int main()
{int Len;  //数组长度int *array;  //数组指针int i;  //数组下标//获取数组长度printf("请输入数组长度:");scanf("%d", &Len);//动态分配内存空间,如果失败就退出程序array = (int*)malloc( Len * sizeof(int) );if(array == null){printf("内存分配失败!\n");exit(0); }//向数组占用的内存写入数据for(i = 0; i < Len; i++ ){array[i] = i + 1;}// 遍历数组for(i = 0; i < Len; i++){printf("%d  ", array[i]);}printf("\n");free(array); //释放资源return 0;
}

一维数组

一维数组的声明

类型名 数组名[常量表达式];

例如:

int a[5];    // 注意为常量表达式 不能是变量

以上就是定义的一个长度为5的整型数组,方括号中的常量表达式为数组的元素个数(即数组长度),a为数组名,同时代表的数组的首元素地址。

一维数组的初始化

  • 完全初始化:定义时给所有元素赋值

    int a[5] = {1, 2, 3, 4, 5};
    
  • 不完全初始化:定义时只给部分的元素赋值

    int a[5] = {1,2}
    

    这种方法只给部分的元素赋值,未赋初值的系统会为默认为其赋初值为0。

    注意:定义数组一定要为其赋初值,不能a[5] = {};,只有一个大括号,系统会随机为其赋垃圾值,会导致程序出现不必要的错误。

    大括号中最少要写一个数。比如:int a[5]={0};此时系统默认全部赋0值

  • 如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度,因为此时元素的个数已经确定了。

    int a[] = {1,2,3,4,5};
    // 不能直接定义 int a[] = {};而不给其赋初值
    

    以上形式自动会根据括号内元素生成长度,省去了我们自己去计算数组长度可能导致错误的情况。

访问数组元素

  • 数组元素可以通过数组名称加索引进行访问。元素的索引放在方括号内。
int a[5] = {1,2,3,4,5};
printf ( "%d\n" , a[3]);  // 输出的结果为4
  • 注意:数组中第一个索引值为 0;长度为n的数组,最后一个元素的索引值为n - 1,若输入a[n]则会报 “数组越界错误”
  • 也可以用指针访问数组,例:
#include <stdio.h>int main()
{int a[5], i;printf("输入元素: ");//循环输入数据for(i = 0; i < 5; ++i)scanf("%d", a + i);  //数组名代表首元素地址//遍历数组printf("数组元素为: \n");for(i = 0; i < 5; ++i)printf("%d  ", *(a + i));printf("\n");return 0;
}

二维数组

  • 相当于一个一维数组的列表,声明一个 x 行 y 列的二维整型数组,如int a[2][3];相当于两个长度为3的一维数组;理解上可以将其视为x行y列的矩阵,但其内存是连续的。

二维数组的声明

类型名 数组名 [ x ][ y ];      //x表示行标,y表示l列标
  • 同样的 a为数组名,同时代表的数组的首元素地址

二维数组的初始化

// 二维数组可以通过在括号内为每行指定值来进行初始化
a[2][3] = {{1,2,3} , {4,5,6}};
//也可以去掉括号,等价
a[2][3] = {1,2,3,4,5,6};

二维数组的访问

  • 二维数组中的元素可以通过使用下标索引(行索引和列索引)来访问
#include <stdio.h>int main()
{int a[2][3] = {1,2,3,4,5,6};printf("%d",a[1][2]); //输出结果为6return 0;
}
  • 也可以通过指针访问
#include <stdio.h>int main()
{int a[2][3] = { { 1, 2, 3} , {4, 5, 6,} };int (*p)[3] = a; //定义数组指针执行数组int i, j;p = a;//遍历数组for (i = 0; i < 2; i++ ){for ( j = 0; j < 3; j++ )  printf("%d   " , *(*(p+i)+j));}printf ("\n");return 0;
}

多维数组

对于多维数组其实就是维度的推广,用法基本上差不多,学习了指针后,对于多维数组的运用可以应用指针来解决。

有错误欢迎指正,谢谢~

C语言数组知识点总结相关推荐

  1. 每日干货丨C语言数组知识点总结

    一.一维数组 1. 初始化方法 第一种:完全初始化.依次赋值 如:a[5] = {2,3,4, 5, 6}: a[] = {1,2, 3, 4, 5, 6}; 第二种:不完全初始化.初始化式中的值从a ...

  2. c语言二维数组作用,C语言二维数组知识点介绍

    C语言二维数组知识点介绍 数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本 ...

  3. c语言设计 数组的知识点,C语言程序设计知识点及示例.pdf

    C语言程序设计知识点及示例 四川大学锦江学院 C语言程序设计知识点及示例 知识点1:除了复合语句而外,C语言的语句都以分号结束. 示例1:C语言的简单语句 (非复合语句语句)必须以 结束. 参考答案: ...

  4. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx

    c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...

  5. C语言小知识点练习总结

    最近在准备C语言的上级考试,之前对C接触不多,在练习过程中把一些小知识点记录下来. 1.字符串的截取 利用strncpy函数,传入三个参数,分别为目标字符串,起始位置,长度. 例如将日期字符串转化为数 ...

  6. c语言的44种运算符,C语言重要知识点总结【9】:C语言运算符(详解)

    目录 一.前言 二.运算符分类 三.运算符的优先级 四.常用运算符 1. 算术运算符 2. 关系运算符 3. 逻辑运算符 4. 赋值运算符 5. 条件运算符 6. 逗号运算符 7. 强制类型转换运算符 ...

  7. C语言详细知识点(上)

    ❄️下一篇❄️C语言详细知识点(下) 文章目录 一.C语言概述 1.C语言的主要特点 2.算法的概念及特点 二.C程序设计的基础语法 1.常量和变量 2.数据类型 3.运算符和表达式 4.C 语句 5 ...

  8. C语言重要知识点总结【7】:C语言中的常量、变量、标识符

    目录 一.常量 1. 整型常量 2. 实型常量(浮点型常量) 3. 字符常量 3.1 普通字符 3.2 转义字符(表格) 3.3 常见字符与ASCII代码表 4. 字符串常量 4.1 字符串所占内存字 ...

  9. C语言数组测试函数,(完整word版)C语言数组与函数阶段测试题答案---(20200807070313)(8页)-原创力文档...

    } } C语言数组与函数阶段测试题答案 一.选择题( 18*2=36 分) 1. 在定义" int a[5][6]; "后,第 11个元素是 [ C ] A.a[2][5] B . ...

最新文章

  1. ECCV20| 3D目标检测时序融合网络
  2. Django、Flask、Tornado的比较
  3. 工作275:表单验证重置
  4. Spring+Hessian搭建远程方法调用
  5. iphone以旧换新活动_上苏宁易购预定iPhone12,以旧换新享5G!
  6. java lambda_Java 8 Lambda 表达式 ( 中 )- 外部参数
  7. 2021-03-08
  8. firefox 邮箱分类过滤
  9. 五大常用数据库的应用领域介绍
  10. 在Python中安装meta模块
  11. html5数独游戏设计,数独游戏的前端实现
  12. oracle erp系统好用么,oracleerp系统优缺点
  13. inet_ntop函数的简单实现及调用
  14. QT的triggered意思
  15. 不同性能测试工具的并发模式
  16. 多目标应用:多目标蜣螂优化算法求解多旅行商问题(Multiple Traveling Salesman Problem, MTSP)
  17. 使用Blob对象接收后台返回的图片流并展示到前端页面
  18. 【大数据】Hadoop (二) HDFS
  19. Windows设置VMware虚机开机自启
  20. 机器学习笔记 - 使用Keras和深度学习进行乳腺癌分类

热门文章

  1. 开源软件和开源社区的反思
  2. MES和ERP在生产过程优化上,谁更胜一筹?
  3. 爱的乐章,Hibernate之三部曲
  4. [软件]Windows Genuine Advantage Validation Cracked
  5. NCUT 数据库基础 铁路购票系统
  6. Linux下vscode无法查看定义?
  7. python制作天气预报软件(UI界面)
  8. 关于app2sd、a2sd、data2sd、a2sd+的区别的解释(扫盲贴)
  9. 逐步解析力扣846. 一手顺子 (贪心)
  10. 【Python实用工具】(情人节献礼)turtle函数绘制动态玫瑰花