C语言怎么循环创建数组

NonArrendertiMai 2018-05-05 08:01:57
写代码中遇到个问题,循环次数未知,循环终止条件取决于输入数据,每次循环需要一个固定长度的数组存储数据,也就是循环几次创建几个数组,那么问题来了,怎么在for循环里加入数组定义,每次的数组名或指针名不一样呢?求解
...全文
1871 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-05-07
  • 打赏
  • 举报
回复
若不能确定数组的个数和长度,建议使用动态申请空间的方式malloc/free。
赵4老师 2018-05-07
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=new int *[rows];
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=new int[cols];
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        delete[] p[i];
    }
    delete[] p;
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
leetow2006 2018-05-06
  • 打赏
  • 举报
回复
C语言中动态创建:malloc,释放:free C++中:new,delete
paschen 2018-05-06
  • 打赏
  • 举报
回复
引用 4 楼 NonArrendertiMai的回复:
[quote=引用 3 楼 paschen 的回复:] [quote=引用 2 楼 NonArrendertiMai的回复:][quote=引用 1 楼 paschen 的回复:] 1、每次循环数组大小不同可以每次循环中动态创建数组(malloc) 2、循环次数未知可以在循环中进行判断,在满足条件时再break跳出循环
额,每次的数组长度是一样的,长度已知,但是数组名每次要不一样,比如a1,a2,a3,an,这该如何实现呢[/quote] 循环不会根据变量名字去区分,如果数组长度一样,建议定义成二维数组 循环时分别对应 a[0][N] a[1][N].......[/quote] 但是循环变量不能用来定义数组呐,长度需要常量啊。。。。[/quote] 动态申请二维数组,长度可以在运行时确定
strangejie 2018-05-06
  • 打赏
  • 举报
回复
C语言变量名不接受参数形式,也就是说,你要声明一个变量,就要在编程的时候写出来,而不能用程序自动生成变量名, 所以楼主说的这种动态定义变量,要求每个变量名都不一样,我觉得不可能办得到。 我的做法是声明一个存放指针的数组,比如: char *s[100]; 每次需要用到一个字符数组时,动态申请空间, s[i]=malloc(n*sizeof(char)); 相当于把这个字符数组的首地址放到s中去了, 这样一来,其实s[i]和你要求的不同名变量是等效的。
真相重于对错 2018-05-05
  • 打赏
  • 举报
回复
vector<vector<int> > vecs; for( ..... ) { vector<int> tmp; tmp.push_back(1); .... vecs.push_back(tmp); }
NonArrendertiMai 2018-05-05
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
[quote=引用 2 楼 NonArrendertiMai的回复:][quote=引用 1 楼 paschen 的回复:] 1、每次循环数组大小不同可以每次循环中动态创建数组(malloc) 2、循环次数未知可以在循环中进行判断,在满足条件时再break跳出循环
额,每次的数组长度是一样的,长度已知,但是数组名每次要不一样,比如a1,a2,a3,an,这该如何实现呢[/quote] 循环不会根据变量名字去区分,如果数组长度一样,建议定义成二维数组 循环时分别对应 a[0][N] a[1][N].......[/quote] 但是循环变量不能用来定义数组呐,长度需要常量啊。。。。
paschen 2018-05-05
  • 打赏
  • 举报
回复
引用 2 楼 NonArrendertiMai的回复:
[quote=引用 1 楼 paschen 的回复:] 1、每次循环数组大小不同可以每次循环中动态创建数组(malloc) 2、循环次数未知可以在循环中进行判断,在满足条件时再break跳出循环
额,每次的数组长度是一样的,长度已知,但是数组名每次要不一样,比如a1,a2,a3,an,这该如何实现呢[/quote] 循环不会根据变量名字去区分,如果数组长度一样,建议定义成二维数组 循环时分别对应 a[0][N] a[1][N].......
NonArrendertiMai 2018-05-05
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
1、每次循环数组大小不同可以每次循环中动态创建数组(malloc) 2、循环次数未知可以在循环中进行判断,在满足条件时再break跳出循环
额,每次的数组长度是一样的,长度已知,但是数组名每次要不一样,比如a1,a2,a3,an,这该如何实现呢
paschen 2018-05-05
  • 打赏
  • 举报
回复
1、每次循环数组大小不同可以每次循环中动态创建数组(malloc) 2、循环次数未知可以在循环中进行判断,在满足条件时再break跳出循环
很好用的东西很经典的一本C教程,TKS这算是谭浩强C语言设计比较新的版本了!目录很详细,使用很方便目录 第1章 C语言程序设计的概念  1.1 程序与程序设计语言   1.1.1 计算机与程序   1.1.2 计算机程序设计语言   1.1.3 高级语言程序的开发过程  1.2 C语言及其标准   1.2.1 C语言的出现   1.2.2 C语言的标准  1.3 C语言程序概要   1.3.1 函数   1.3.2 语句   1.3.3 名字与声明   1.3.4 变量及其赋值   1.3.5 算术运算   1.3.6 赋值类运算符的副作用及限制  习题一 第2章 基本数据类型  2.1 基本数据类型的特征   2.1.1 数值的定点表示与浮点表示   2.1.2 整数的有符号类型与无符号类型   2.1.3 类型宽度与取值范围  2.2 数据常量   2.2.1 整型常量   2.2.2 字符类型及其常量   2.2.3 实型常量   2.2.4 符号常量  2.3 数据类型转换   2.3.1 几个概念   2.3.2 数据类型的隐式转换   2.3.3 数据类型的显式转换   2.4 数据的控制台输入与输出   2.4.1 格式化输出函数pIintf()   2.4.2 格式化输入函数scanf()   2.4.3 字符输入/输出函数getchar()与putchar()  习题二 第3章 C语言程序的流程控制  3.1 算法   3.1.1 算法的组成要素与基本性质   3.1.2 算法描述工具   3.1.3 自项向下、逐步细化的算法设计过程  3.2 判断   3.2.1 命题的“真”、“假”与C语言中的逻辑值   3.2.2 关系运算与关系表达式   3.2.3 逻辑运算与逻辑表达式  3.3 选择型程序设计   3.3.1 if...else结构的应用   3.3.2 if.elseif结构的应用   3.3.3 switch结构的应用   3.3.4 条件表达式  3.4 循环型程序设计   3.4.1 迭代与穷举算法   3.4.2 while结构   3.4.3 dowhile结构   3.4.4 for结构   3.4.5 循环结构的中途退出与重复周期的中途结束  习题三 第4章 模块化程序设计  4.1 函数   4.1.1 设计C语言程序就是设计函数   4.1.2 函数结构   4.1.3 函数定义与函数声明   4.1.4 虚实结合与传值调用   4.1.5 递归函数  4.2 变量的存储属性   4.2.1 变量的作用域与生存期   4.2.2 C语言中变量的存储类型   4.2.3 通过const声明将变量存储在只读区  4.3 模块的编译与链接   4.3.1 分别编译   4.3.2 用项目管理多文件程序的编译与链接过程   4.3.3 头文件  4.4 宏定义与宏替换   4.4.1 字符串宏定义及其基本格式   4.4.2 使用宏需注意的问题   4.4.3 撤销己定义的宏   4.4.4 带参数的宏定义  习题四 第5章 数组  5.1 一维数组   5.1.1 一维数组定义及数组元素引用   5.1.2 数组元素的引用方法   5.1.3 一维数组的初始化   5.1.4 一维数组元素的查找与排序   5.1.5 数组与函数  5.2 字符串   5.2.1 字符数组与字符串   5.2.2 字符串的输入/输出   5.2.3 字符串处理函数  5.3 二维数组与多维数组   5.3.1 二维数组及其定义   5.3.2 二维数组的初始化   5.3.3 向函数传送二维数组   5.3.4 多维数组  习题五 第6章 指针  6.1 指针基础   6.1.1 地址与指针   6.1.2 指针变量及其定义   6.1.3指针变量的引用   6.1.4 指针的移动与比较   6.1.5 指向指针变量的指针与多级指针   6.1.6 指向void类型的指针  6.2 指针与数组   6.2.1 数组元素的指针引用   6.2.2 多字符串的存储与处理   6.2.3 内存的动态分配与动态数组的建立  6.3 指针与函数   6.3.1 指针参数与函数的地址传送调用   6.3.2 带参数的主函数   6.3.3 返回指针值的函数   6.3.4 指向函数的指针  习题六 第7章 用户定制数据类型  7.1 结构体类型基础   7.1.1 结构体类型及其定制   7.1.2 定义结构体类型变量及对变量的初始化   7.1.3 结构体变量的操作   7.1.4 嵌套结构体类型   7.1.5 位段  7.2 结构体数组   7.2.1 结构体数组的定义与初始化   7.2.2 对结构体数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧