原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html

如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的。当时问老师,老师说是不可以的。后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白。今天在逛论坛时终于找到了C语言中的用法(看原贴):

int *a;
    int N;
    scanf("%d", &N);
    a = (int *) malloc(N * sizeof(int));
    ....
    free(a);

这样就动态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。

 
int main()
{
    int i = 0;

int *a;
    int N;

printf("Input array length: ");
    scanf("%d", &N);
    printf("\n");

a = (int *) malloc(N * sizeof(int));//int 可以用*a来代替
    
    for(i = 0; i < N; i++)
    {
        a[i] = i + 1;

printf("%-5d", a[i]);
        if ((i + 1) % 10 == 0)
            printf("\n");
    }

free(a);

printf("\n");    
    return 0;
}
这样就完成了数组a[N]的动态分配,那么多维怎么分配呢?一个道理啊!!!!!!!!!!!!

二维

int main()

{

int nrows,ncolumns;

scanf("%d,%d",nrows,ncolumns);

区别的地方 
//为数组分配行数      注意指针多了个* 
int **array = malloc(nrows * sizeof(*array));//注意分配的是整形指针的数量 每行元素是个整形指针

/*这里可以写成

int **array;

array=(int**)malloc(nrows*sizeof(int*));//这里int可以写成**array

*/

//对每行分配数组个数(就是二维数组的列数)
 for(i = 0; i < nrows; i++)
 {

/*

这里int*可以写成*array 其实array是一个指向指针的指针变量,所以要将分配的内存转化为指针类型,在一台计算机中所有的指针变量分配的内存大小相同都是计算机的位数(就是地址线的条数,指针变量存放的是地址与地址线对应可以寻址)

*/

array[i] = (int*)malloc(ncolumns * sizeof(int));

for(l=0;l<ncolumns;l++)< p="">

{

array[i][l]=...

}

}

//付初值以及处理过程

free(array);

return 0;

}
多维一个道理 每增加一维 输入数据就要多一个  定义指针的时候就多一个*  且分配的时候也要多个* 还要多个for循环

三维

int main()

{

int rows,colnums,num;

scanf("%d %d %d",rows,colnums,num);

int ***p=malloc(rows*sizeof(*p));

/*

这里可以写成

int ***p;

p=(int***)malloc(rows*sizeof(int**));//int**可以写成*p

*/

for(int i=0;i<colnums;i++)< p="">

{

p[i]=(int**)malloc(colnums*sizeof(int*));//**p

for(int j=0;j<num;j++)< p="">

{

p[i][j]=(int*)malloc(num*sizeof(int));//这里可以写成*p

for(r=0;r<num;r++)< p="">

{

p[i][j][r]=...

}

}

}

free(p);

return 0;

}

以上扩展内容纯熟个人总结(水平不高) 如果有哪里不对希望高手帮忙指出,谢谢.(暂时代码里面可能还有很多问题,我会慢慢修改)

 
 
 
 
 
 
现在代码应该没有什么问题了  如果还有什么问题请高手指出

【转】C语言中动态分配数组的更多相关文章

  1. C语言中动态分配数组

    如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老师说是不可以的.后来又问了一位教C++的老师,他告诉我在C++里用new可以做到,一直不用C++,所以也不明白.今天在逛 ...

  2. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  3. Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针)

    the-way-to-go_ZH_CN/07.1.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  4. Go语言中底层数组和切片的关系以及数组扩容规则

    Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...

  5. C语言中的数组和指针以及字符串

    数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 da ...

  6. c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式

    char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...

  7. C语言中的数组与字符串

    1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...

  8. C语言中的数组的使用——混乱的内存管理

    在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...

  9. Go语言中的数组(九)

    我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽. 定义数组 go语言定义数组的格式如下: ]int var 数组名 [数组长度 ...

随机推荐

  1. 201521123077 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 线程的同步(加锁防止多个线程同时访问) synchronized关键字修饰 可以使用于方法前或者方法内做同步 ...

  2. 201521123023《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  3. 201521123074 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  4. JavaEE成长之路

    前言 学习Java已经有一段时间了,在学习的过程中也走过了不少弯路. 写下这篇博文,主要是想记录下自己学习编程之路,以及反思自己在学习的时候出现的问题,下面也会给出我自认为学习JavaEE的路线,想要 ...

  5. Hibernate注解配置与XML配置区别

    注解配置的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar . hibernate-annotations.jar.ejb3-p ...

  6. python实例编写(7)---测试报告与测试套件(多个py文件,1个py文件内多个用例)

    一.  一个.py文件批量执行测试用例(一个.py文件下多个用例执行) 如果直接使用:unittest.main(),则按字母顺序执行, 对于前后之间又依赖关系的用例,需要按特定的顺序执行,则使用 s ...

  7. JavaScript自动化构建工具入门----grunt、gulp、webpack

    蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动  自动化时代的程序员: 希望一切都可以自动完成  ...

  8. RocketMQ之双Master方式部署以及简单使用

    1.1.服务器环境 192.168.100.24 root nameServer1,brokerServer1 Master1 192.168.100.25 root nameServer2,brok ...

  9. 循环语句for,while,until,select

    循环 *循环执行 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 *常见的循环语句有for,while,until for循环 for 变量名 n ...

  10. STM32F103X 开发环境搭建

    背景 芯片:STM32F103C8T6核心板 开发平台:IAR 安装IAR 官方下载地址:https://www.iar.com/iar-embedded-workbench/#!?device=ST ...