C语言 动态一维数组

来源:互联网 发布:直播平台系统源码 编辑:程序博客网 时间:2024/05/29 15:45
#include<stdio.h>#include<stdlib.h>static void print_array(int,int*);void main(){    int length=6;    int i;    int *array=(int*)malloc(sizeof(int)*length);//分配length个内存空间的指针array    /*    int * array :定义1个int类型的指针,用来指向int类型的数组首地址。        sizeof(int):就是一个int类型的字节数:也就是4个字节,        sizeof(int)*lengthgth :就是4*length个字节        malloc(sizeof(int)*lengthgth):就是分配4*length个字节内存地址空间,并返回地址空间的首地址(第一个字节的首地址)        (int*)malloc(sizeof(int)*length):就是把malloc(sizeof(int)*length)返回的地址(指针),转换成int类型的指针。                         (这样指针加一移动时,指针移动的步长是int类型的(也就是4个字节))    */    int* temp=array;//先保存动态数组的地址    for(i=0;i<length;i++)    {        array[i]=2*i;//通过下标访问动态一维数组。    }    print_array(length,array);    length++;//数组长度加一    array=(int*)realloc(array,sizeof(int)*length);    if(array!=temp)        printf("重新分配内存后动态数组的首地址变了\n");    else        printf("重新分配内存后动态数组的首地址没有改变\n");    /*    1) 假如数组a 内存里接着的4个字节还没被其他对象或程序占用, 那么就直接把后面4个字节加给数组a,                数组前面7个旧的元素的值不变,  数组a的头部地址也不变.    2) 假如数组 a内存里接着的4个字节已经被占用了,                那么realloc 函数会在内存其他地方找1个连续的32byte 内存空间,                并且把数组a的7个旧元素的值搬过去,  所以数组a的7个旧元素的值也不变,            但是数组a的头部地址变化了.    */    array[length-1]=7*2;//为新加的最后一个元素赋值    print_array(length,array);}static void print_array(int length,int *array){    int i;    printf("array的首地址为%x\n",array);    printf("数组元素:");    for(i=0;i<length;i++)    {        printf("%-5d",array[i]);        //%-5d:表示每个数占5个字符,左对齐,不够的数用空格填充    }printf("\n");}

执行结果:

array的首地址为592aa8数组元素:0    2    4    6    8    10重新分配内存后动态数组的首地址变了array的首地址为590f00数组元素:0    2    4    6    8    10   14


原创粉丝点击