C语言中动态分配数组
int *a;
int N;
scanf("%d", &N);
a = (int *) malloc(N * sizeof(int));
....
free(a);
这样就动态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。
#include
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]的动态分配,那么多维怎么分配呢?一个道理啊!!!!!!!!!!!!
二维
#include
#include
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循环
三维
#include
#include
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语言中动态分配数组的更多相关文章
- 【转】C语言中动态分配数组
原文地址:http://blog.chinaunix.net/uid-11085590-id-2914577.html 如何动态的定义及使用数组呢?记得一般用数组的时候都是先指定大小的.当时问老师,老 ...
- go语言中的数组切片:特立独行的可变数组
go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...
- 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 ...
- Go语言中底层数组和切片的关系以及数组扩容规则
Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...
- C语言中的数组和指针以及字符串
数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 da ...
- c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式
char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...
- C语言中的数组与字符串
1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...
- C语言中的数组的使用——混乱的内存管理
在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...
- Go语言中的数组(九)
我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽. 定义数组 go语言定义数组的格式如下: ]int var 数组名 [数组长度 ...
随机推荐
- mac中openfire启动失败的解决方式
不知为何,几次出现这个问题了 解决方法:使用终端命令 1:sudo chmod -R 777 /usr/local/openfire/bin 2:cd /usr/local/openfire/bin ...
- C# Socket编程(5)使用TCP Socket
TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer) ...
- hiho_1068_RMQ_st算法
题目 给出一数组A,编号从1到n,然后进行q次查询,每次查询给出一个边界[beg, end],要求给出数组A中范围[beg, end]之内的最小值. 题目链接: RMQ_ST 分析 区间问题使用线段树 ...
- Hbase之遍历获取数据
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import ...
- 【转】android fragment 博客 学习
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fra ...
- java 字符串(正则表达式)未完
正则表达式: 其实就是用于操作字符串的一个规则.(以某种方式描述字符串) 基础: 1.描述一个整数:\d(表示一位数字) \\d(\\ 表示要插入一个正则表达式)表示一位数字 \\\\ 插入一个普通 ...
- windows+tomcat 7配置二级域名访问其他web程序
1.在域名管理中做好二级域名的解析 2.在tomcat的server.xml中增加如下: <Host name="wx.ai77.cn" debug="0" ...
- nyoj 115------城市平乱( dijkstra // bellman )
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- linq分页扩展(转)
原文地址:http://www.cnblogs.com/RainbowInTheSky/p/4590508.html public static List<T> ToPagedList&l ...
- java配置数据库连接池的方法步骤
java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下 先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...