标签:动态开辟二维数组的说明
开辟二维数组的说明
图解 [1][][][][]
[2][][][][]
[3][][][][]
void main()
{
int i,j;
/*注意申请的指针格式 先创建的是1,2,3首地址为指向指针的指针a来代表 1,2,3所在地址*/
int **a = (int **) malloc(sizeof(int *) * 3);
/* 循环创建了3个 1*4的数组 并将首地址给了 1,2,3的位置上*/
for (j=0;j<3;j++)
{
a[j] = (int *) malloc(sizeof(int) * 4);
}
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
a[i][j]=i+j;/* 使用的区域就是1,2,3后面的 3*4个 int 整型空间 */
printf("%d ",a[i][j]);
}
printf("\n");
}
for (j=0;j<3;j++)
{
free(a[j]); /* 先释放1,2,3上的指针指向的3片区域 */
}
free(a); /* 最后释放,能指向1,2,3的指针*/
}/*******************
0 1 2 3
1 2 3 4
2 3 4 5
以下也是 这结果
*******************/
void main()
{
int *temp;
int m=3,n=4,i,j;
int **a = (int **)malloc(m*sizeof(int *));
temp=(int *)malloc(m*n*sizeof(int));
for( i=0;i<m;i++)
{
// a[i] = temp+n; /* 关于网站(http://bbs.csdn.net/topics/200005906)里的讨论,试了一下均可以*/
a[i] = temp+n*i;
for( j=0;j<n;j++)
{
a[i][j]=i+j;
printf("%d ",a[i][j]);
}
printf("\n");
}
free(temp);
free(a);
}
void main()
{
int *temp;
int m,n;
printf("Input the m,n:");
scanf("%d%d",&m,&n);
temp=(int *)malloc(m*n*sizeof(int));
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
printf("Input the data: ");
scanf("%d", &temp[i,j]); //好象直接这样子就可以的,
}
for (int i=0; i<m; i++)
for(int j=0; j<n; j++)
printf("%d ", temp[i,j]);
return 0;
}
}
/*******************
2 2 2
2 2 2
*******************/
void main()
{
int (*a)[0] = malloc(sizeof(int)*3*4); /* 不用写明转换类型的版本 */
int i=0,j=0;
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
a[i][j]=i+j;
printf("%d ",a[i][j]);
}
printf("\n");
}
}
//结构体的方式 不便于写访问
main()
{
arr *array1;
int rowx=3,rowy=4;
int i,j,k=0;
array1=(arr *)malloc(sizeof(arr)*rowx);//创建链表数组
for(i=0;i<rowx;i++) //再在每一个链表中创建一维数组,这样整体就构成二维数组
array1[i].array=(int *)malloc(sizeof(int)*rowy);
}
malloc连续开辟性 但在以上方法中,先一维再循环开辟二维中并不能保证 空间是连续的 与直接定义 int A[3][4];不一样;
/* c++(http://blog.csdn.net/vipygd/article/details/5909817)里面写了写新的方法 */
标签:动态开辟二维数组的说明
原文地址:http://wz609.blog.51cto.com/10821410/1725824