本篇文章给大家谈谈c语言二维数组动态,以及C语言二维数组动态分配对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言-二维数组动态分配2、在C语言中,怎样定义一个动态的二维数组?3、c语言如何动态创建二维数组4、C语言中如何定义动态二维数组并输出5、C语言如何动态分配二维数组??6、C语言 动态构造 二维数组
C语言-二维数组动态分配
pArray2=(int**)malloc(sizeof(int*[3])); //分配了3个int*的空间,32地址环境下指针的长度都是32位的也就是4字节,那3个int*就是12字节,和3个int长度是一样的,凑巧而已
也可以写成这样:
pArray2=(int**)malloc(3*sizeof(int*)); //分配3个int*的空间
现在pArray2指向的有效空间内包含3个指针,这3个指针是int*,也就是指向int的指针,这3个指针的值是随机的,还不能用,先要让它们指向合适的空间才行
于是就有:
for(….)
*(pArray2+i)=(int*)malloc(sizeof(int[3])); //这就是给pArray2指向的空间内的3个指针校正方向,让每一个指针指向由3个int整数组成的数组的首地址,这才是最终的数据空间
和pArray2一样,也可以写成:
*(pArray2+i)=(int*)malloc(3*sizeof(int)); //3个int
在C语言中,怎样定义一个动态的二维数组?
很简单
比如
#include “unistd.h”
int main(int argc, char ** argv) {
int **array;
if(argc 3) {
printf(“ERROR: argument more\n”);
exit(1);
}
int a = atoi(argv[1]); //将第一个参数变成一维大小
int b = atoi(argv[2]); //将第2个变成2维大小
array = (int **)malloc(a*sizeof(int *)); //申请第一组指针
int i;
for(i=0; i a; i++) {
array[i] = (int*) malloc(b*sizeof(int));
}
//记得释放,我赖的写了
}
编译后运行 mingling 3 4就能生成array[3][4]
c语言如何动态创建二维数组
既然是动态创建,那么,所创建的二维数组的行、列数应该具有“普适”性,即,应由“用户”确定二维数组的规模。这是有难度的。因为,二维数组要牵扯行指针,且需要固定每行的列元素个数,用这种思路就没有办法达到“普适”。
为此,必须清醒地知道,所谓二维数组,其元素在内存中依然是以一维的方式存放的。说实话,二维数组本质上是不存在的。
既然如此,那么,“构造”一个所谓的二维数组,只要能提供足够实用的函数(工具)操作这个二维数组就可以了。
综上,接受由用户决定的二维数组行、列值,申请一个一维数组的空间,按照二维数组方式进行定位和操作就可以了。
为简便起见,我用如下定义,你可以更改里面的类型,以适应自己的需要:
typedef int USER_TYPE;
// 定义一个控制二维数组(矩阵)的“控制头”,由三个成员组成
typedef struct MATRIX
{
USER_TYPE *data; // 真正用来存储二维数组元素的空间
int Row; // 二维数组行数
int Col; // 二维数组列数
}MATRIX;
MATRIX *initMatrix(int row, int col); // 初始化二维数组
USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下标的元素
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 给指定下标的元素赋值
void destroyMatrix(MATRIX *matrix); // 销毁二维数组
void destroyMatrix(MATRIX *matrix)
{
free(matrix-data);
free(matrix);
}
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val)
{
matrix.data[i*matrix + j] = val;
}
USER_TYPE getElementAt(MATRIX matrix, int i, int j)
{
return matrix.data[i*matrix.Col + j];
}
MATRIX *initMatrix(int row, int col)
{
MATRIX *mp;
mp = (MATRIX *)malloc(sizeof(MATRX));
mp-data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * row * col);
mp-Row = row;
mp-Col = col;
return mp;
}
把上面的函数当成工具,完成二维数组初始化、赋值、取值等一系列操作,如果需要比较,还需要编写比较的函数。
C语言中如何定义动态二维数组并输出
使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
示例代码,分配3行4列二维数组:
#include stdio.h#include malloc.h int main(){ int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int)*4); } //初始化 for (i = 0; i 3; ++i){ for (j = 0; j 4; ++j){ a[i][j] = i+j; } } //输出测试 for (i = 0; i 3; ++i){ for (j = 0; j 4; ++j){ printf (“%d “, a[i][j]); } printf (“\n”); } //释放动态开辟的空间 for (i = 0; i 3; ++i){ free(a[i]); } free(a); return 0;}/*输出:0 1 2 31 2 3 42 3 4 5*/
C语言如何动态分配二维数组??
动态分配二维数组:
void main(int argc, char * argv[])
{
int NC=100, NR=200;
int i,j;
char **a; // a[NR][NC] — *a[NR] — a[j][i]
a = (char **) malloc(sizeof(char *) * NR);
for (j=0;jNR;j++){
a[j] = (char *) malloc(sizeof(char) * NC);
}
// 释放空间: free(a);
编译错误是因为p[j]=(char *)malloc,而不是题目的(char *)malloc(n*sizeof(char))。
扩展资料:
二维数组的动态分配
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。
参考资料来源:百度百科–二维数组
参考资料来源:百度百科–C语言
C语言 动态构造 二维数组
你的空间申请有问题,这是帮你改好后的,你可以运行看看。不着调是否帮上你了,如果OK还望采纳,和而后~~ #include stdio.h
#include stdlib.hvoid main()
{
int n,i=0,j=0;
int **p;
printf(“?????????:”);
scanf(“%d”,n);
//p=(int**)malloc(sizeof(int)*n*n);
p=(int**)malloc(sizeof(int*)*n);
for(i=0;in;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);for(j=0;jn;j++)
{
scanf(“%d”,p[i][j]);
//printf(“%d”,p[i][j]);
}
}for(i=0;in;i++)
{
for(j=0;jn;j++)
{
printf(“%d “,p[i][j]);
}
printf(“\n”);
}
system(“pause”);
}
c语言二维数组动态的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于C语言二维数组动态分配、c语言二维数组动态的信息别忘了在本站进行查找喔。