黑马程序员技术交流社区

标题: 建立动态数组例题,希望对大家有帮助! [打印本页]

作者: 斑斑1111    时间: 2016-2-28 22:16
标题: 建立动态数组例题,希望对大家有帮助!
[size=18.000000pt]先定义一个长度为1的整型数组,然后依次从键盘上输入数据,每输入一次就及时添加到数组中,实现代码如下:



[size=18.000000pt]#include <stdio.h>

[size=18.000000pt]//malloc 和 realloc 函数使用之前要先声明stdlib.h头文件

[size=18.000000pt]#include <stdlib.h>

int main(int argc, const char * argv[]) {
    //定义一个int型常量,来表示数组的长度
    int i = 0;
    //用malloc函数定义一个动态数组(指针),长度为一个int类型的字节数
    int *a = (int *)malloc((i+1)*sizeof(int));
    //第一次提示用户输入数字
    printf("请输入第1个整数:\n");
    //接收输入的数字
    scanf("%d",&a);
    //进入循环
    while (1) {
        //在第一次输入之后,让用户选择退出还是继续输入
        printf("输入0退出,输入1继续:\n");
        int fno;
        scanf("%d",&fno);
        if (fno == 0) {
            printf("程序正在退出...\n");
            break;
        }else if(fno == 1){
[size=18.000000pt]           //如果选择继续输入,则提示用户输入一个整数

[size=18.000000pt]            printf("请输入第%d个整数:\n",i+2);
[size=18.000000pt]           //数组元素增加一个,也就是长度+1

[size=18.000000pt]            i++;
[size=18.000000pt]           //使用realloc函数给之前定义的指针a重新分配空间,扩展到循环次数相对应的数值

[size=18.000000pt]            a = (int *)realloc(a, (i+1)*sizeof(int));
[size=18.000000pt]           //接收这个数

[size=18.000000pt]            scanf("%d",&a);
        }
    }
    //定义一个int型的静态数组arr
    int arr[i+1];
    //把指针a中的每个元素传到数组arr中
    for (int k=0; k<i+1; k++) {
        arr[k] = a[k];
    }
    //遍历数组,进行打印
    for (int j=0; j<i+1; j++) {
        printf("%d\t",arr[j]);
    }
    printf("\n");
    //输出静态数组arr的长度
    printf("数组arr的长度为%lu\n",sizeof arr/sizeof(int));
    //释放指针a;

[size=18.000000pt]    free(a);
   
    return 0;
}



[size=18.000000pt]此段代码仅供大家参考...新手上路,有问题请多多指教!要喷请轻喷....谢谢大家!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2