日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[ 1001] 动态开辟二维数组的说明

發布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ 1001] 动态开辟二维数组的说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開辟二維數組的說明?

??

? 圖解 ?[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)里面寫了寫新的方法 */


轉載于:https://blog.51cto.com/wz609/1725824

總結

以上是生活随笔為你收集整理的[ 1001] 动态开辟二维数组的说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。