【C语言】 数组:-- 一维数组 -- 二维数组 -- 数组越界 -- 数组作为函数的参数1

简介: 【C语言】 数组:-- 一维数组 -- 二维数组 -- 数组越界 -- 数组作为函数的参数1

***************************************************正文开始*************************************************

1、数组

1.1 数组的定义

数组是一组相同类型元素的集合。

1.2 为什么使用数组

A:我们创建少量(四五个)的变量时单个创建就可以了,但要是创建大量(十个、二十个、一百个)的相同类型的变量时一个个的定义太过麻烦,这时候我们就可以

2、一维数组

2.1 一维数组的创建

数组的创建方式:定义数组来表示。

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

实例:

int arr[10];
char ch[15];
float arr2[20];
//以上实例的 [] 里面必须是常量

注:C99标准前,数组的大小必须是常量表法式。C99标准中,引入了变长数组的概念,变长数组中允许数组的大小用变量来指定。编译器要是不支持就使用不了,vs 编译器就是不支持。

gcc 是支持 C99 标准的:

但是变长数组是不能初始化的。

2.2 一维数组的初始化

数组的初始化是指,在创建数组的时候给数组的内容一些合理初始值(初始化)。

例如:

完全初始化:

int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int arr2[3] = { 2,4,5 };
char arr3[3] = { 'a','b','c' };
char arr4[5] = "abcde";

不完全初始化:

int arr[10] = { 0 };
int arr2[3] = { 0,1 };
char arr3[3] = { 'a','b' };
char arr4[5] = "abc";

不完全初始化的数组,除了初始化的部分是指定的数字或字符,剩下的部分默认初始化为 0 或者字符 '\0' 。

如果数组初始化了,可以不指定数组的大小,数组大小会根据初始化来确定大小。

我们可以通过调试的监视窗口来看看没有初始化的部分:


我们再看看没有给定大小的数组在内存中怎样存储:

#include <stdio.h>
#include <string.h>
int main()
{
  char arr[] = "abc";
  int sz = sizeof(arr);
  int len = strlen(arr);
  printf("%d %d\n", sz, len);
  char arr1[] = { 'a', 'b', 'c' };
  int sz1 = sizeof(arr1);
  int len1 = strlen(arr1);
  printf("%d %d\n", sz1, len1);
    return 0;
}

效果展示:



相关文章
|
2月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
836 0
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
271 15
|
9月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
287 1
一文彻底搞清楚C语言的函数
|
9月前
|
存储 人工智能 程序员
一文彻底搞明白C语言的数组
本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!
403 0
一文彻底搞明白C语言的数组
|
10月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
226 3
|
C语言 存储 C++
《C语言及程序设计》实践项目——二维数组与指针
返回:贺老师课程教学链接 【项目1-二维数组当函数参数】定义一个函数来完成对参数数组中元素的求和工作,函数声明如下:int sum(int array[ ][4],int m,int n); //该函数完成对array数组中的前m行和n列元素求和在以下程序的基础上,完成对sum函数的定义。#include &lt;stdio.h&gt; int sum(int array[ ][4],in
1455 0
|
存储 C语言
《C语言及程序设计》实践项目——二维数组
返回:贺老师课程教学链接 【项目1-折腾二维数组】创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值; 按行序优先输出数组元素; 将所有元素值乘以3后保存在数组中; 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”); 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出
1574 0
|
10月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
438 23
|
10月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
354 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
10月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
182 24