C语言动态分配数组

指针方式

可以使用指针,并在需要时通过malloc函数动态分配内存。下面是一个示例:

#include <stdio.h>
#include <stdlib.h>

// 定义包含动态数组的结构体
struct DynamicArray {
    int size;
    int *array;
};

// 初始化结构体及动态数组
void initDynamicArray(struct DynamicArray *dynArray, int size) {
    dynArray->size = size;
    dynArray->array = (int *)malloc(size * sizeof(int));
    if (dynArray->array == NULL) {
        printf("Memory allocation failed\n");
        exit(1);
    }
}

// 释放动态分配的内存
void freeDynamicArray(struct DynamicArray *dynArray) {
    free(dynArray->array);
    dynArray->array = NULL;
    dynArray->size = 0;
}

int main() {
    int i;
    struct DynamicArray myArray;

    // 初始化结构体及动态数组
    initDynamicArray(&myArray, 5);

    // 给数组赋值
    for (i = 0; i < myArray.size; i++) {
        myArray.array[i] = i * 10;
    }

    // 输出数组元素
    printf("Array elements: ");
    for (i = 0; i < myArray.size; i++) {
        printf("%d ", myArray.array[i]);
    }
    printf("\n");

    // 释放动态分配的内存
    freeDynamicArray(&myArray);

    return 0;
}

在这个示例中,DynamicArray结构体包含了一个整型成员size表示数组的大小,以及一个整型指针array用于存储动态数组。

initDynamicArray函数中,我们通过malloc函数为数组分配内存,然后将分配的内存地址赋值给array成员。在main函数中,我们可以通过结构体变量访问并操作这个动态数组。

最后,在程序结束前,我们使用freeDynamicArray函数释放了动态分配的内存,以避免内存泄漏。

柔性数组

在C语言中,结构体内定义动态数组并没有直接的语言特性支持,但是可以通过一些技巧来实现。其中一种常见的方法是使用柔性数组(Flexible Array Members)。

柔性数组是C99标准引入的特性,允许在结构体的末尾定义一个长度不定的数组。这种数组被称为柔性数组,因为它的大小可以在运行时确定。

下面是一个示例:

#include <stdio.h>
#include <stdlib.h>

// 定义结构体,包含一个柔性数组成员
struct DynamicArray {
    int size;
    int array[]; // 柔性数组成员,长度不定
};

// 创建并初始化结构体及动态数组
struct DynamicArray* createDynamicArray(int size) {
    struct DynamicArray* dynArray = malloc(sizeof(struct DynamicArray) + size * sizeof(int));
    if (dynArray == NULL) {
        printf("Memory allocation failed\n");
        exit(1);
    }
    dynArray->size = size;
    return dynArray;
}

// 释放动态分配的内存
void freeDynamicArray(struct DynamicArray *dynArray) {
    free(dynArray);
}

int main() {
    int i;
    int size = 5;
    struct DynamicArray* myArray = createDynamicArray(size);

    // 给数组赋值
    for (i = 0; i < size; i++) {
        myArray->array[i] = i * 10;
    }

    // 输出数组元素
    printf("Array elements: ");
    for (i = 0; i < size; i++) {
        printf("%d ", myArray->array[i]);
    }
    printf("\n");

    // 释放动态分配的内存
    freeDynamicArray(myArray);

    return 0;
}

在这个示例中,DynamicArray结构体中包含一个柔性数组成员array,长度不定。在createDynamicArray函数中,我们使用了malloc来分配结构体和柔性数组的内存空间。需要注意的是,柔性数组必须是结构体的最后一个成员。

相关推荐

  1. C语言动态分配数组

    2024-03-27 10:44:05       46 阅读
  2. C语言-动态内存分配

    2024-03-27 10:44:05       55 阅读
  3. C语言实现动态数组

    2024-03-27 10:44:05       62 阅读
  4. C语言】(20)动态内存分配

    2024-03-27 10:44:05       51 阅读
  5. C 语言静态数组动态数组

    2024-03-27 10:44:05       42 阅读
  6. C语言动态内存分配之malloc(初阶版)

    2024-03-27 10:44:05       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 10:44:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 10:44:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 10:44:05       87 阅读
  4. Python语言-面向对象

    2024-03-27 10:44:05       96 阅读

热门阅读

  1. rust - 动态构造文件名字符串

    2024-03-27 10:44:05       49 阅读
  2. elementui的tree默认高亮显示无效的问题

    2024-03-27 10:44:05       41 阅读
  3. @JsonFormat(pattern = “yyyy-MM-dd“) 年月日用法

    2024-03-27 10:44:05       34 阅读
  4. 怎么实现redis的高可用

    2024-03-27 10:44:05       44 阅读
  5. Knight Moves(UVA 439)

    2024-03-27 10:44:05       47 阅读
  6. 4.4 call far ptr和retf指令,本质是栈、goto指令

    2024-03-27 10:44:05       39 阅读
  7. Hive的安装

    2024-03-27 10:44:05       46 阅读
  8. unity pivot和center的区别

    2024-03-27 10:44:05       55 阅读
  9. 在OpenCV的detectMultiScale方法中,scaleFactor参数

    2024-03-27 10:44:05       40 阅读
  10. VR虚拟仿真在线模拟旅游专业情景

    2024-03-27 10:44:05       46 阅读
  11. 一些常见的Ansible问题和答案

    2024-03-27 10:44:05       40 阅读