练习-动态数组的构建

    xiaoxiao2022-06-25  180

    前面用malloc动态创建了4字节的内存空间,那么如何用malloc动态创建20字节的内存空间给5个int型变量使用呢?

    int *p = malloc(20); int *p = malloc(sizeof(*p) * 5);

    动态内存是通过指针变量存储数据的,当一个指针变量指向一个动态内存之后,这个动态内存存储数据时根据的是指针变量的基类型。比如上面这个指针变量p的基类型是 int 类型,那么他只会用前4个字节存储第一个数,第五个字节到第八个字节存储第二个数,那么第五个字节到第八个字节是如何存储第二个数据的呢?是自动存储?当然不是,是通过指针变量p的移动,因为指针变量的基类型是 int 型,所以要想指向接下来的 4 字节就实现 p+1,要想指向再接下来的4字节则p+2,以此类推。

    #include<stdio.h> #include<stdlib.h> int main(void) { int *p = malloc(sizeof(*p) * 5); *p = 5; *(p+1) = 10; *(p+2) = 15; *(p+3) = 20; *(p+4) = 25; printf("%d\n", *p); printf("%d\n", *(p+1)); printf("%d\n", *(p+2)); printf("%d\n", *(p+3)); // 最后记住不想用的时候, free(p); p = NULL; return 0; }

    动态数组数组的长度可以动态的改变,可以是变量,这是与传统数组最大的不同,传统数组的长度只能在定义时指定,只能是常量。

    注释1:系统给int型变量分配 4 字节的内存单元。


    最新回复(0)