C语言——动态数组的创建和使用

这篇具有很好参考价值的文章主要介绍了C语言——动态数组的创建和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言文章更新目录

C语言学习资源汇总,史上最全面总结,没有之一
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数
C代码是怎样跑起来的?
C语言实现字符串的加密和解密
C语言——文件的基本操作
使用C语言链表创建学生信息并且将信息打印输出
图解C语言冒泡排序算法,含代码分析
实例分析C语言中strlen和sizeof的区别
开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
动图图解C语言选择排序算法,含代码分析
动图图解C语言插入排序算法,含代码分析
C语言指针数组和数组指针详解
5分钟搞懂C语言中的传值和传址

C语言实例专栏(持续更新中…)

什么是动态数组?

动态数组是相对于静态数组而言的,从“动”字可以看出它的灵活性。静态数组的长度是预先定义好的,在整个程序中,一旦给定数组大小后就无法改变。而动态数组则不然,它可以根据程序需要重新指定数组大小。动态数组的内存空间是由堆动态分配的,通过执行代码为其分配存储空间,只有程序执行到分配语句时,才为其分配存储空间。

动态数组和一般数组(静态数组)的区别

  • 静态数组:创建非常方便,使用完也无需释放,引用起来也简单,但是创建后无法改变数组大小是其致命的弱点。
  • 动态数组:创建麻烦,使用完必须由程序员自己释放,否则会引起内存泄露,但是其使用非常灵活,能根据程序需要动态分配大小。

动态数组的创建和使用

在创建动态数组的过程中要遵循一个原则,那就是从外层向里层逐层创建,从里层向外层逐层释放。如果要创建一个N维的动态数组,那么要从第一维开始创建,直到第N维为止;而释放时与创建时相反,即从第N维开始释放,直到第一维为止。下面我们一起来看看一维动态数组和二维动态数组。

一维动态数组

  • 创建形式

类型说明符* 数组名 = (类型说明符*)malloc(数组长度*sizeof(类型说明符))

  • 实例
//
// Created by 冲哥 on 2022/11/26.
// 微信关注【C语言中文社区】,免费领取500G学习资料
//
#include<stdio.h>
#include<stdlib.h>

int main() {
    int n; //用来接收要创建的一维动态数组的长度
    int *arr;
    printf("请输入所要创建的一维动态数组的长度:");
    scanf("%d", &n);
    if ((arr = (int *) malloc(sizeof(int) * n)) == NULL) { //使用malloc来动态分配内存
        printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
        return -1;
    }
    for (int i = 0; i < n; i++) { //通过循环给数组赋值并在控制台进行打印
        arr[i] = i + 1;
        printf("%d\t", arr[i]);
    }
    free(arr); //释放内存空间

    return 0;
}
  • 运行结果
请输入所要创建的一维动态数组的长度:8
1    2       3       4       5       6       7       8

二维动态数组

  • 创建形式
类型说明符** 数组名 = (类型说明符**)malloc(第一维长度*sizeof(类型说明符*))
for(int  i=0;i<第一维长度;i++){
    数组名[i]=(类型说明符*)malloc(第二维长度*sizeof(类型说明符))
}
  • 实例
//
// Created by 冲哥 on 2022/11/26.
// 微信关注【C语言中文社区】,免费领取500G学习资料
//
#include<stdio.h>
#include<stdlib.h>

int main() {
    int n1, n2;
    int **arr;
    printf("请输入所要创建的动态数组的第一维长度:");
    scanf("%d", &n1);
    printf("请输入所要创建的动态数组的第二维长度:");
    scanf("%d", &n2);

    if ((arr = (int **) malloc(n1 * sizeof(int *))) == NULL)//使用malloc给第一维分配内存
    {
        printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
        return -1;
    }

    for (int i = 0; i < n1; i++) {
        if ((arr[i] = (int *) malloc(n2 * sizeof(int))) == NULL)//使用malloc给第二维分配内存
        {
            printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
            return -1;
        }
    }
    for (int i = 0; i < n1; i++) { //通过循环给数组赋值并在控制台进行打印
        for (int j = 0; j < n2; j++) {
            arr[i][j] = i * n2 + j + 1;
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }
    for (int i = 0; i < n1; i++) {
        free(arr[i]);//释放第二维
    }
    free(arr);//释放第一维

    return 0;
}
  • 运行结果
请输入所要创建的动态数组的第一维长度:5
请输入所要创建的动态数组的第二维长度:4
1       2       3       4
5       6       7       8
9       10      11      12
13      14      15      16
17      18      19      20

代码中的注释已经写的很详细了,如果还有什么疑问欢迎评论区留言。
如果您觉得本篇文章对您有帮助,请点赞,转发给更多的人。文章来源地址https://www.toymoban.com/news/detail-737652.html

到了这里,关于C语言——动态数组的创建和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

    当二维数组作为结构成员或返回值时,通常需要根据用户传递的参数来决定二维数组的大小,此时就需要动态分配二维数组。 如果现在有一个二维数组 a[3][2] ,那么将有以下几种指针可以指向它: 方式一 方式二: 在应用场景中通常采用以下三种方式动态分配二维数组,因为

    2024年02月04日
    浏览(56)
  • 1480. 一维数组的动态和

    力扣1480. 一维数组的动态和 一、题目描述: 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示例 1: 输入:nums = [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。 示例 2: 输入:nums = [1,1,1,1,

    2024年02月09日
    浏览(35)
  • Leetcode—1480.一维数组的动态和【简单】

    之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

    2024年02月04日
    浏览(37)
  • 从二维数组到一维数组——探索01背包问题的动态规划优化

    本文将继续上一篇博客爬楼梯之后继续讲解同样用到了动态规划的 01背包问题 在解决动态规划问题时,我们经常面临着空间复杂度的挑战。01背包问题是一个典型的例子,通常使用二维数组来表示状态转移,但这样会带来额外的空间开销。在本文中,我们将探讨如何通过优化

    2024年04月11日
    浏览(60)
  • C语言:使用指针打印数组内容

    写一个 函数 打印arr数组的内容 ,不使用数组下标, 使用指针 。 arr 是 一维数组 。                       =========================================================================                         (一). 定义 一维数组arr : float arr[] = { 3.14f, 99.9f, 66.5f, 0.0f };          定义 指

    2024年02月10日
    浏览(39)
  • C语言好好题(一维数组)

    两天没有更新了,贴纸们,有没有想我呀。😄😄😄 好了,就寒暄到这里吧,下面请看题: 有序序列判断 输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序 输入描述: 第一行输入一个整数N(3≤N≤50)。 第

    2024年02月05日
    浏览(42)
  • C语言中一维数组及二维数组的运用

    int * p  = arr; int * q = arr[1]; 其中arr是数组名,代表了整个数组的首元素地址,这个是一个常量,放在常量存储区,所以在给int*p赋值的时候可以不用带,而下面的arr[1]则代表数组里的某一个元素,所以在赋值时要加上  有个例题: 下列运行结果  解析:首先看main函数里的第二

    2024年02月13日
    浏览(46)
  • 【C语言】利用数组处理批量数据(一维数组和二维数组)

    前言 :在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有

    2024年02月08日
    浏览(56)
  • 《C语言深度解剖》(4):深入理解一维数组和二维数组

    🤡博客主页:醉竺 🥰 本文专栏: 《C语言深度解剖》 😻 欢迎关注: 感谢大家的点赞评论+关注,祝您学有所成! ✨✨💜💛想要学习更多 数据结构与算法 点击专栏链接查看💛💜✨✨   数组是一组相同类型元素的集合。 数组的创建方式:  数组创建的实例:  注:数组

    2024年04月09日
    浏览(82)
  • C语言中函数返回数组(一维和二维)

    C语言中函数返回数组是很重要的一种应用,有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作,比如一次返回多个值,这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。 函数返回一维数组中需要注意的是:定义函数时需要在函数类型的后

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包