[ 1001] 动态开辟二维数组的说明
開辟二維數(shù)組的說明?
??
? 圖解 ?[1][][][][]
? ? ? ? [2][][][][]
? ? ? ? [3][][][][]
void main()
{ ? ? ? ??
int i,j;
/*注意申請的指針格式 ?先創(chuàng)建的是1,2,3首地址為指向指針的指針a來代表 1,2,3所在地址*/
int **a = (int **) malloc(sizeof(int *) * 3);
/* 循環(huán)創(chuàng)建了3個 1*4的數(shù)組 并將首地址給了 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;/* 使用的區(qū)域就是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片區(qū)域 */
? ?}
free(a); ? /* 最后釋放,能指向1,2,3的指針*/
}/*******************
0 1 2 3
1 2 3 4
2 3 4 5
以下也是 這結(jié)果
*******************/
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; ?/* 關(guān)于網(wǎng)站(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); ?/* 不用寫明轉(zhuǎn)換類型的版本 */
?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");
? }?
}
?//結(jié)構(gòu)體的方式 不便于寫訪問
main()
{
? ? arr *array1;
? ? int rowx=3,rowy=4;
? ? int i,j,k=0;
? ? ?
? ? array1=(arr *)malloc(sizeof(arr)*rowx);//創(chuàng)建鏈表數(shù)組
? ? for(i=0;i<rowx;i++) ?//再在每一個鏈表中創(chuàng)建一維數(shù)組,這樣整體就構(gòu)成二維數(shù)組
? ?array1[i].array=(int *)malloc(sizeof(int)*rowy);
?
}
malloc連續(xù)開辟性 但在以上方法中,先一維再循環(huán)開辟二維中并不能保證 空間是連續(xù)的 與直接定義 int A[3][4];不一樣;
/* c++(http://blog.csdn.net/vipygd/article/details/5909817)里面寫了寫新的方法 */
轉(zhuǎn)載于:https://blog.51cto.com/wz609/1725824
總結(jié)
以上是生活随笔為你收集整理的[ 1001] 动态开辟二维数组的说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。