慢烹数组——C语言基础篇

简介: 概念👏咋说呢,我个人觉得这部分还是蛮重要的,首先是兴趣其次是压力,前面迷糊咯后面路就会走窄。它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

概念👏

咋说呢,我个人觉得这部分还是蛮重要的,首先是兴趣其次是压力,前面迷糊咯后面路就会走窄。

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


创建方式👏

如何创建一个数组呢?如下:

type_t   arr_name   [const_n];

分为三个部分,type_t是数组的元素类型;arr_name是数组名;const_n是一个常量表达式,用于指定数组的大小。注意这里提及的是常量表达式,那么小朋友你是否有很多疑惑,我可不可以这样写

int a = 3;
int re[a];

其实是可以的,但我用的是vs2019编译器,这种情况下会报错“表达式必须是常量”,其实在C99标准之前,是不支持使用变量的,只能是常量,C99中增加了变长数组的概念,允许数组大小是变量,而且要求编译器支持C99标准。特别是vs2019对C99的支持不是很好,语法限制死了,像Linux Centos7等是没有问题的。


初始化👏

创建的同时给一些值就叫初始化。

比如我给几个就创几个: int re[5]={1,2,3,4,5},这就是完全初始化。


那如果我比较懒,创建了10个数,只放了5个进去可以吗?是可以的,这种叫做不完全初始化,效果是剩余的元素默认初始化为 “0”。


我给定了元素但没有创建个数可以吗:int re[]={1,2,3,4,5};这样也是没有任何问题的,它会根据初始化的内容来确定他有几个元素,我们打开调试的监视窗口一目了然:

image.png

**PS.**对于如下代码我们需要区分一下:

char re[]={'a',98,'c'}

这个数组看起来是不是感觉有问题?不是说数组是同种类型的元素吗?答案是没有问题的,注意不要忘了ASCII码哦,这里的“98”就等价于“B”。

char re[]="abc";
//re有3个元素,数组大小3个字节
char re2[3]={'a','b','c'};
//re2有4个元素,数组大小4个字节(\0)

使用👏

数组的使用在之前介绍操作符的文章里我就介绍了 : [ ] ,下标引用(访问)操作符,他是用来访问数组元素的,在数组中有一条铁律,数组中的元素下标是从0开始的。


下标访问只能访问一个元素,我可不可以把他所有内容打印出来呢?比如我有一个5个元素的数组,那我只要产生0~4的下标去访问元素就可以了。

int main()
{
int re[5] = {1,2,3,4,5};
int i = 0;
int a = sizeof(re)/sizeof(re[0]);//计算元素个数
for(i=0;i<5;i++)
{
 printf("%d\n",re[i]);//下标不是指定元素大小的,可以是变量
}
return0;
}

一维数组的存储👏

一维数组在内存中如何存储的呢?我在研究是就把它具象化,看看他的地址:

int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for (i = 0; i <= 4; i++)
{
  printf("&arr[%d]-%p\n", i, &arr[i]);
}
return 0;
}      

结果如下:

image.png

在16进制中 'C’的大小为12,所以不难发现他们的地址都是每两个元素之间相差 4,因为整型大小为 4个字节,一个字节给一个地址,所以得出结论:


1.一维数组在内存中是连续存放的;

2.数组随下标的增长,地址是由低到高变化的;

这个用处还是蛮大的,当我知道数组首元素的时候,就可以全部搞定了

int re[5] = {1,2,3,4,5};
int *p = &re[0];
int  i = 0;
for(i = 0;i<5;i++)
printf("%d ",*(p+i));//逐个全部打印数组内容
return 0;


相关文章
|
26天前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
35 6
|
30天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
1月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
1月前
|
存储 数据管理 编译器
揭秘C语言:高效数据管理之数组
揭秘C语言:高效数据管理之数组
|
1月前
|
C语言 C++
保姆式教学C语言——数组
保姆式教学C语言——数组
17 0
保姆式教学C语言——数组
|
1月前
|
C语言
数组栈的实现(C语言描述)
本文介绍了如何在C语言中使用数组来实现栈的数据结构,包括栈的创建、入栈、出栈、获取栈顶元素、检查栈是否为空、获取栈的大小以及销毁栈等操作,并提供了相应的函数实现。
25 1
|
1月前
|
C语言
C语言数组
C语言数组
17 0
|
1月前
|
存储 C语言 索引
c语言回顾-数组(全网最详细,哈哈哈) (下)
c语言回顾-数组(全网最详细,哈哈哈) (下)
43 0
|
1月前
|
存储 编译器 C语言
c语言回顾-数组(全网最详细,哈哈哈)(上)
c语言回顾-数组(全网最详细,哈哈哈)(上)
55 0