c语言分层理解(c语言数组)(1)

简介: 1. 一维数组的创建和初始化首先,我们要知道数组是相同类型元素的集合。1.1 一维数组的创建type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小123在创建时我们所碰到的问题1. 数组[]中能不能是一个变量

1. 一维数组的创建和初始化

首先,我们要知道数组是相同类型元素的集合。

1.1 一维数组的创建

type_t  arr_name  [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

在创建时我们所碰到的问题

1. 数组[]中能不能是一个变量

这是在visual studio 2022中的情况:

13396dce89837118d0d6f185a6561b02.png

在visual studio 2022中我们看见它是不行的,实际上数组[变量]这种语法是c99标准中的,它叫变长数组。很明显,visual studio 2022不支持c99版本。

在支持c99标准的编译器下是可以运行的,并不会报错。

2. 数组创建时可不可以不给数组指定大小


1ff82be8bfbf53f580ac17101d12cca0.png

这是不行的,创建的时候必须指定空间大小。,不然会报错。

3. 数组空间太大栈区会放满

f4e4dd3bdefd9eb762c74f22d4dee3dd.png

4. 补充

int arr[2+3]//这种语法是对的,[]中可以是表达式
char arr1[2 + 3];
int arr2[2 + 3];
int arr3[3 + 2];//加法支持交换律
float arr4[4 + 3];
double arr5[5 + 3];
//以上都是正确的,不用质疑

注意:数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化

1.2 一维数组的初始化

首先了解初始化和赋值的意思:

int a = 0;//这叫初始化
int n;
n = 20;//这叫赋值

初始化是创建变量的同时给定一个数值。

赋值是创建变量之后对这个变量给定一个数值

重点放在初始化是同时进行,赋值是一前一后进行

一维数组初始化常见问题罗列

1. int arr[] = {1,2,3}写法可以吗?

这种写法是可以的。

f9069c3b55daccca8291631846aa7711.png

arr数组中存放的是123,这里没有给定空间大小,数组就自动根据元素个数给定这个数组大小。这个数组的空间大小是12。

2. int arr[10] = {1,2,3,4,5}写法可以吗?

这种写法是没有问题的,这个叫做不完全初始化。


0b7388747d3b69b2016c87ed9f339727.png

这个数组中存放的是1234500000,说明了初始化不完全,编译器会自动给其初始化为0,这里的数组空间大小是40,原因是我们规定了数组大小。

3. 看看char arr1[] = "abc"和char arr2[] = {‘a’,‘b’,‘c’}的区别

9bd5f90cdc58b9b97254d8dd00b8fa7b.png

这里我们发现,arr1中有四个元素,arr2中有三个元素,说明arr1的空间大小是4,arr2的空间大小是3。

理解了这点再来看看char arr3[10] = "abc"和char arr4[10] = {‘a’,‘b’,‘c’}的区别:

78ed22de324612150946966e8c1972ce.png

这里我们看到的是一样的,其实并不是,上面我们已经验证了char arr1[] = “abc”,arr1中包含的是a,b,c,\0,arr2中包含a,b,c,这里虽然arr3和arr4看起来一样,但是不同,arr3中其实是a,b,c,\0,0,0,0,0,0,0,arr4中其实是a,b,c,0,0,0,0,0,0,0,这就能解释为什么不一样的原因了。

2. 一维数组的使用

对于数组的使用我们知道[]是一个下标引用操作符,其实就是数组访问的操作符。我们之前提到一个交换律的概念,如:2+3可以写成3+2,一个双目操作符的两个操作数是可以交换的,数组中的两个操作数在某些场景中也是可以交换的,如:

#include <stdio.h>
int main()
{
  int arr[] = { 1,2,3,4,5 };
  int i = 0;
  for (i = 0; i < 5; i++)
  {
    printf("%d ", i[arr]);
    //printf("%d ",arr[i]);
  }
  return 0;
}

总结:

1.数组是使用下标来访问的,下标是从0开始的。

2.数组的大小可以通过计算得到

int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);

3. 一维数组在内存中的存储

还是先看现象再看实质;

62066fcdbc382d74b78f82add8c5f13e.png

通过这段代码我们发现地址都是隔4个字节的大小,说明一维数组在内存中是连续存放的。随着数组下标的增长,地址也是由低地址到高地址变化。















相关文章
|
1月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
150 6
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
87 5
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
70 4
|
3月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
74 6
|
3月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
3月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
3月前
|
C语言
C语言数组
C语言数组
35 0

热门文章

最新文章