一文彻底搞明白C语言的数组

简介: 本文详细介绍了C语言中的数组,包括定义、初始化(静态与动态)、存储方式、访问方法及常用操作,如遍历、修改元素和作为函数参数传递。数组是C语言中最基本的数据结构之一,掌握它对编程至关重要。下篇将介绍二维数组,敬请期待!

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!


1.数组

数组是 C 语言中最基本和最重要的数据结构之一,它为存储一组相同类型的数据元素提供了一种便捷的方式,并允许我们通过索引来访问这些元素。

2.数组的定义

在 C 语言中,数组的定义遵循以下基本语法:

type arrayName[arraySize];

其中:
type 是数组元素的数据类型,可以是基本数据类型(如 int、float、char 等),也可以是自定义的数据类型。
arrayName 是数组的名称,它是一个标识符,遵循 C 语言中标识符的命名规则。
arraySize 是一个正整数,表示数组中元素的数量,它必须是一个常量表达式。

例如,定义一个包含 10 个整数的一维数组可以这样写:

int myArray[10];

3.数组的初始化

数组根据初始化的形式不一样,分为2种:1.静态初始化 2.动态初始化

静态初始化

可以在声明数组的同时为其元素赋初值,这称为静态初始化。以下是一些静态初始化的例子:


// 完全初始化
int numbers[5] = {1, 2, 3, 4, 5};

// 部分初始化,未初始化的元素将被自动初始化为 0(对于静态存储持续时间)或未定义(对于自动存储持续时间)
int anotherArray[5] = {1, 2};

// 不指定数组大小,编译器会根据初始化元素的数量来确定数组大小
int autoSizedArray[] = {1, 2, 3, 4, 5};

动态初始化

在程序运行时,可以使用循环和赋值语句来动态初始化数组。例如:

#include <stdio.h>

int main() {
    int dynamicArray[5];
    for (int i = 0; i < 5; i++) {
        dynamicArray[i] = i * 2;
    }
    return 0;
}

4.数组的存储

数组在内存中是连续存储的。

对于 int myArray[10] 这样的数组,元素 myArray[0] 存储在内存的某个位置,随后的元素 myArray[1] 存储在紧挨着 myArray[0] 的下一个位置,依此类推。元素之间的地址偏移量等于元素的大小(对于 int 类型,通常为 4 字节)。

可以使用 & 运算符来查看数组元素的地址:

#include <stdio.h>

int main() {
    int array[5] = {10, 20, 30, 40, 50};
    for (int i = 0; i < 5; i++) {
        printf("Address of array[%d] is %p\n", i, (void*)&array[i]);
    }
    return 0;
}

5.数组的访问

使用索引可以访问数组中的元素,索引从 0 开始,最大索引为 arraySize - 1。例如:

#include <stdio.h>

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    // 访问数组元素
    printf("The third element is %d\n", array[2]);
    return 0;
}

6.数组的常用操作

遍历数组

使用 for 循环是遍历数组的最常见方法:

#include <stdio.h>

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

数组元素的修改

可以使用赋值语句修改数组元素:

#include <stdio.h>

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    array[2] = 10;  // 修改第三个元素
    return 0;
}

数组作为函数参数

可以将数组作为函数的参数传递,但需要注意的是,数组作为参数时,实际上传递的是数组的首地址,因此在函数中修改数组元素会影响原数组。以下是一个示例:

#include <stdio.h>

// 函数声明
void printArray(int arr[], int size);
void modifyArray(int arr[], int size);

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    printArray(array, 5);
    modifyArray(array, 5);
    printArray(array, 5);
    return 0;
}

// 打印数组元素
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

// 修改数组元素
void modifyArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] = arr[i] * 2;
    }
}

好啦,这篇就到这里吧,希望大家要掌握数组哈,下一篇,咱们写一下二维数组,记得一键三连哈

相关文章
|
算法 编译器 程序员
C语言学习笔记—P11(数组<2>+图解+题例+三子棋游戏<初级>)
C语言学习笔记(数组<2>+图解+题例+三子棋游戏<初级>)
309 0
C语言学习笔记—P11(数组<2>+图解+题例+三子棋游戏<初级>)
|
存储 C语言
C语言学习笔记—P10(数组<1>+图解+题例)
C语言学习笔记(数组<1>+图解+题例)
373 0
C语言学习笔记—P10(数组<1>+图解+题例)
|
C语言
C语言学习笔记——数组(二)
C语言学习笔记——数组
482 0
C语言学习笔记——数组(二)
|
C语言
C语言学习笔记——数组(一)
C语言学习笔记——数组
328 0
C语言学习笔记——数组(一)
|
机器学习/深度学习 C语言 编译器
【C语言】学习笔记4——数组
我直接把控制语句和循环跳过了。大致看了一下,讲得太繁琐了。这部分在后面用C写数据结构就可以练得很熟了。 1. 数组: 由数据类型相同得一系列元素组成。内存上是一片连续得存储单元。 2. 声明 int nums[5] // 内含5个int类型元素的数组 float ...
1128 0
|
11月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1576 0
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
531 15
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
694 1
一文彻底搞清楚C语言的函数
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
753 3
|
存储 算法 安全
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
989 2