c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言数组动态

更新时间:2024-01-17

介绍

在C语言中,数组是一种用于存储相同类型数据的数据结构。数组的长度在声明时必须事先确定,这就意味着数组的大小是固定的,无法在运行时动态地改变。然而,有时候我们需要根据程序的需要动态地分配和释放内存,这就需要使用动态数组。

动态数组实现

在C语言中,可以通过动态内存分配函数来实现动态数组,这些函数包括malloccallocrealloc。以下是这些函数的详细解释和示例代码:

malloc

malloc函数用于分配指定大小的连续内存块,并返回该块内存的起始地址,如果内存分配失败,则返回NULL

#include 
#include 

int main() {
    int size = 5;
    int* dynamicArray = (int*)malloc(size * sizeof(int));
    
    if (dynamicArray == NULL) {
        printf("内存分配失败");
        return 0;
    }
    
    // 使用动态数组
    for (int i = 0; i < size; i++) {
        dynamicArray[i] = i + 1;
        printf("%d ", dynamicArray[i]);
    }
    
    free(dynamicArray); // 释放内存
    
    return 0;
}

calloc

calloc函数也用于分配连续的内存块,但与malloc不同的是,它会将内存块中的所有字节设置为零。

#include 
#include 

int main() {
    int size = 5;
    int* dynamicArray = (int*)calloc(size, sizeof(int));
    
    if (dynamicArray == NULL) {
        printf("内存分配失败");
        return 0;
    }
    
    // 使用动态数组
    for (int i = 0; i < size; i++) {
        printf("%d ", dynamicArray[i]);
    }
    
    free(dynamicArray); // 释放内存
    
    return 0;
}

realloc

realloc函数用于重新调整之前分配的内存块的大小。它接受两个参数:之前分配的内存块的指针以及新的大小。如果新的大小小于之前分配的大小,则内存块会被缩小;如果新的大小大于之前分配的大小,则内存块会被扩展。函数返回调整后的内存块的起始地址,如果内存分配失败,则返回NULL

#include 
#include 

int main() {
    int size = 5;
    int* dynamicArray = (int*)malloc(size * sizeof(int));
    
    if (dynamicArray == NULL) {
        printf("内存分配失败");
        return 0;
    }
    
    // 使用动态数组
    for (int i = 0; i < size; i++) {
        dynamicArray[i] = i + 1;
        printf("%d ", dynamicArray[i]);
    }
    
    int newSize = 10;
    int* resizedArray = (int*)realloc(dynamicArray, newSize * sizeof(int));
    
    if (resizedArray == NULL) {
        printf("内存重新分配失败");
        free(dynamicArray); // 释放内存
        return 0;
    }
    
    dynamicArray = resizedArray; // 更新指针
    
    // 使用重新分配后的动态数组
    for (int i = size; i < newSize; i++) {
        dynamicArray[i] = i + 1;
        printf("%d ", dynamicArray[i]);
    }
    
    free(dynamicArray); // 释放内存
    
    return 0;
}

总结

通过使用malloccallocrealloc函数,我们可以实现 C 语言中的动态数组。动态数组的主要优势是可以根据程序的需求动态地分配和释放内存,以适应不同大小的数据集。