在 c 语言中动态分配数组-ag捕鱼王app官网

当前位置:ag捕鱼王app官网 > > 编程语言 > c语言 >

在 c 语言中动态分配数组

作者:迹忆客 最近更新:2023/05/05 浏览次数:

本文将演示如何在 c 语言中动态分配数组的多种方法。


使用 malloc 函数在 c 语言中动态分配数组

malloc 函数是在堆上分配动态内存的核心函数。它分配给定的字节数,并返回指向内存区域的指针。因此,如果要动态分配某些对象类型的数组,首先应该声明一个类型的指针。接下来,应该通过传递元素数量乘以单个对象的大小作为参数来调用 malloc

在下面的例子中,我们分配内存来存储一个字符字符串。按照安全编码标准的要求,将 errno 设置为 0,并检查 malloc 调用返回的指针,以验证函数的成功执行。最后,利用 memmove 函数将字符串复制到分配的内存位置。

#include #include #include #include #define size 100
const char *str = "random string to be moved";
int main() {
    char *arr = null;
    errno = 0;
    arr = malloc(size * sizeof(char));
    if (!arr) {
        perror("malloc");
        exit(exit_failure);
    }
    memmove(arr, str, strlen(str));
    printf("arr: %s\n", arr);
    free(arr);
    exit(exit_success);
}

输出:

arr: random string to be moved

使用 realloc 函数修改 c 语言中已经分配的内存区域

realloc 函数用于修改之前由 malloc 调用分配的内存区域的大小。它将原始内存地址和新的大小作为第二个参数。注意,realloc 可能返回与传递的相同的指针,也可能根据请求的大小和给定地址后的可用内存返回不同的指针。同时,前一个数组的内容将保持不变,直到新指定的大小。

#include #include #include #include #define size 100
const char *str = "random string to be moved";
int main() {
    char *arr = null;
    errno = 0;
    arr = malloc(size);
    if (!arr) {
        perror("malloc");
        exit(exit_failure);
    }
    int num = 102;  // user provided value
    for (int i = 0; i < num; i) {
        if (i > size) {
            arr = realloc(arr, 2 * size);
            if (!arr) {
                perror("realloc");
                exit(exit_failure);
            }
        }
        arr[i] = 'a';
    }
    free(arr);
    exit(exit_success);
}

使用宏在 c 语言中实现给定对象的数组分配

通常,malloc 用于分配一些用户定义结构的数组。由于 malloc 返回的是 void 指针,并且可以隐式转换为其他任何类型,所以比较好的做法是将返回的指针显式转换为对应的类型。因为它比较容易漏掉一些东西,并且不包含正确的标记,所以我们实现了一个宏表达式,取数组中的元素数和对象类型来自动构造正确的 malloc 语句,包括正确的强制转换。

#include #include #include #include #define size 100
typedef enum { jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} month;
typedef struct {
    unsigned char dd;
    month mm;
    unsigned yy;
} date;
#define malloc_array(number, type) \
    ((type *)malloc((number) * sizeof(type)))
int main() {
    date *d = null;
    errno = 0;
    d = malloc_array(size, date);
    if (!d) {
        perror("malloc");
        exit(exit_failure);
    }
    free(d);
    exit(exit_success);
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在c中将整数转换为字符

发布时间:2024/01/03 浏览次数:131 分类:c语言

本教程介绍了在c中将整数转换为字符的不同方法。在c编程语言中,将整数转换为字符在各种情况下都很重要。在c中,字符是以ascii值表示的,因此转换过程相对简单。

发布时间:2023/05/07 浏览次数:364 分类:c语言

本文介绍了如何在 c 语言中使用 typedef enum。使用 enum 在 c 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。

c 语言中的静态变量

发布时间:2023/05/07 浏览次数:167 分类:c语言

本文介绍了如何在 c 语言中使用静态变量。在 c 语言中使用 static 变量在函数调用之间保存变量值

c 语言中生成随机数

发布时间:2023/05/07 浏览次数:158 分类:c语言

本文演示了如何在 c 语言中生成随机数。使用 rand 和 srand 函数在 c 语言中生成随机数

发布时间:2023/05/07 浏览次数:129 分类:c语言

本文演示了如何在 c 语言中使用前缀增量与后缀增量运算符。c 语言中 i 和 i 记号的主要区别

发布时间:2023/05/07 浏览次数:275 分类:c语言

本文演示了如何在 c 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法

发布时间:2023/05/07 浏览次数:177 分类:c语言

本文介绍了如何在 c 语言中使用位掩码。使用 struct 关键字在 c 语言中定义位掩码数据

发布时间:2023/05/07 浏览次数:212 分类:c语言

本文演示了如何在 c 语言中使用标准库排序函数。使用 qsort 函数对 c 语言中的整数数组进行排序

c 语言中的 extern 关键字

发布时间:2023/05/07 浏览次数:131 分类:c语言

本文介绍了如何在 c 语言中使用 extern 关键字。c 语言中使用 extern 关键字来声明一个在其他文件中定义的变量

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图