当前位置: 首页 > news >正文

C语言学习及复习笔记-【9】数组

目录

  • 9. 数组
    • 9.1 数组的定义
    • 9.2 数组与指针的区别
    • 9.3 数组大小计算
    • 9.4 数组的赋值
    • 9.5多维数组寻址方式
    • 9.6 函数数组

9. 数组

9.1 数组的定义

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

9.2 数组与指针的区别

指针:也是一个变量,存储的数据是地址。

数组名:代表的是该数组最开始的一个元素的地址。

区别:指针是一个变量,可以进行数值运算。数组名不是变量,不可以进行数值运算。

char *str="Hello";
char arrgs[]="Hello";

字符数组:

char *p=(char*)&arrgs == char *p=arrgs ;
char *p=(char*)(&(arrgs[0])) == &arrgs == arrgs;

字符串指针:

char *p=(char*)&str != str; str==str[0] =='H'

结论:

​ 字符数组的 首地址可以用 arrgs ,&arrgs,来表示并且它们相等,但是指针&str和str是不同的,当遇到字符串指针时候要注意处理方式。

9.3 数组大小计算

​ 在我们没有明确数组的元素个数时,在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a) 是得到数组 a 的大小,sizeof(a[0]) 是得到数组 a 中单个元素的大小(因此可以不必要是a[0],a[i]都行)。

9.4 数组的赋值

对于数组的初始化需要注意以下几点:

  1. 可以只给部分元素赋值,当 { } 中值的个数少于元素个数时,只给前面部分元素赋值。例如:
int a[10]={12, 19, 22 , 993, 344};

表示只给 a[0]~a[4] 5 个元素赋值,而后面 5 个元素自动初始化为 0

当赋值的元素少于数组总体元素的时候,不同类型剩余的元素自动初始化值说明如下:

  • 对于 short、int、long,就是整数 0
  • 对于 char,就是字符 ‘\0’
  • 对于 float、double,就是小数 0.0

我们可以通过下面的形式将数组的所有元素初始化为 0:

int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};

由于剩余的元素会自动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。

  1. 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
char a[]="hello!"; // 这样赋值之后在结尾会自动加上'\0'。
char a1[]={'h','e','l','l','o','!'}; // 这样赋值是整整好好的6个空间不会自动加上'\0'
所以比较的话,a 的长度比 a1 的要大。

而不能写作:

int a[10] = 1;

9.5多维数组寻址方式

二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。事实上,编译器是这样处理数组的:

设有数组 int a[m][n],如果要访问 a[i][j ]的值,编译器的寻址方式为。

&a[i][j]=&a[0][0]+i*sizeof(int)*n+j*sizeof(int); // 注意 n 为第二维的维数

因此,可以省略第一维的维数,不能省略其他维的维数。

在定义二维数组的时候对其进行初始化,也可以省略第一维,编译器会根据你的初始化语句自动决定第一维度。

9.6 函数数组

将几个返回类型相同的函数定义到函数数组中,通过函数数组指针来调用

//声明   
static U1 (* const TBL_DIM_OUT[DIM_WELCOME_NUM])(void) = {u1_DimexcontOut,                    /* 室内照明函数                          */u1_DimptrOut,                       /* 点照明函数                      */u1_DimlitOut,                       /* 文字盤照明函数                        */u1_DimfueltempOut                   /* 油表和温度照明函数                     */
};//调用
for(u1_cnt = (U1)0; u1_cnt < (U1)DIM_WELCOME_NUM; u1_cnt++){//依次调用这些函数u1_dimout |= TBL_DIM_OUT[u1_cnt]();}
http://www.lryc.cn/news/18273.html

相关文章:

  • Kubernetes入门教程 --- 使用kubeadm进行集群安装
  • 华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)
  • 海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路
  • javaee之node.js与es6
  • 11 nacos源码开篇
  • 13.Jenkins集成sonarqube
  • JavaWeb13-线程休眠和指定唤醒:LockSupport
  • 【第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式创建对象,注入属性)】
  • 前端react面试题(边面边更)
  • 产品3C认证在哪里办理
  • UA-DETRAC数据集转YOLO格式
  • 代码随想录---二叉树的总结和二叉树的定义
  • Hive SQL 执行计划
  • MySQL InnoDB引擎——三层B+树可以存储多少数据量
  • 部署跨云容灾的五大难点
  • Docker Compose
  • 【ARM架构】armv8 系统安全概述
  • 数学小课堂:数学边界
  • 检测中断到来时,让LED灯状态取反,并且在串口工具上打印一句话
  • 2023年CDGA考试-第7章-数据安全(含答案)
  • 输出月份英文名称--C语言实现
  • 6年测试经验老鸟:做不好自动化测试,还谈什么高薪?
  • Java Web:开篇综述与第一章
  • ES6中对象的一些拓展
  • 10分钟快速入门Pandas库
  • 考研复试机试 | C++ | 王道机试课程笔记
  • 【python科目一:生产线系统设计;激光刀切割材料】
  • Linux——进程概念(进程状态)
  • 超详细:正则表达式从入门到入门
  • jupyter notebook小技巧