當前位置:首頁 » 編程語言 » c語言動態構造數組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言動態構造數組

發布時間: 2023-06-26 08:19:09

A. 用c語言,動態創建m*n的數組

用malloc來實現:
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
*(p+m*i+j)就相當於數組的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以實現對數據賦值
使用完釋放free(p)
下面是我寫的一個例子:
#include<stdio.h>
int
main(void)
{
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
//*(p+m*i+j)就相當於數組的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以實現對數據賦值
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("%d
",*(p+m*i+j));
free(p);
system("PAUSE");
return
0;
}

B. 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. c語言 動態數組

#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,*p=0,i;
printf("輸入數組元素個數:");
/*輸入數組元素個數,保存到變數num中*/
scanf("%d",&num);
/*動態分配數組存儲空間*/
p = (int *)malloc(sizeof(int)*num);
/*輸入數據*/
for(i=0;i<num;i++)
{
scanf("%d",&p[i]);
}
/*輸出數據*/
for(i=0;i<num;i++)
{
printf("%d ",p[i]);
}
/*刪除動態創建的數組*/
free(p);
return 0;
}

D. c語言怎樣採用動態方法創建數組

#include<stdio.h>
#include<stdlib.h>

int main(void)
{

int *p;
int num;//數組的大小
int i = 0;

printf("數組的大小:");
scanf("%d",&num);

p = malloc(sizeof(int)*num);

for(;i<num;i++)
p[i]=i;

i = 0;

for(;i<num;i++)
printf("%d ",p[i]);
printf(" ");

return 0 ;

}

E. C語言動態數組結構的編程練習

#include<stdio.h>

#defineMAXNAME30
#defineMAXPHONE15
structTeleType
{
charname[MAXNAME];
charphoneNum[MAXPHONE];
structTeleType*prevaddr;/*這里添加*/
structTeleType*nextaddr;
};

voiddisplay(structTeleType*);/*functionprototype*/

intmain(intargc,charconst*argv[])
{
structTeleTypet1={"Acme,Sam","(555)8982392"};
structTeleTypet2={"Dolan,Edith","(555)6823104"};
structTeleTypet3={"Lanfrank,John","(555)7184581"};
structTeleType*first;/*createapointertoastructure*/
structTeleType*last;/*pointertothelast這里添加*/

first=&t1;/*storet1'saddressinfirst*/
t1.nextaddr=&t2;/*storet2'saddressint1.nextaddr*/
t1.prevaddr=NULL;/*添加*/
t2.nextaddr=&t3;/*storet3'saddressint2.nextaddr*/
t2.prevaddr=&t1;/*添加*/
t3.nextaddr=NULL;/*storetheNULLaddressint3.nextaddr*/
t3.prevaddr=&t2;/*添加*/
last=&t3;/*storet3'saddressinlast這里添加*/
display(last);/*修改*/
return0;
}

voiddisplay(structTeleType*contents)/*contentsisapointer*/
{/*toastructureoftypeTeleType*/
while(contents!=NULL)/*displaytillendoflinkedlist*/
{
printf("%-30s%-20s ",contents->name,contents->phoneNum);
contents=contents->prevaddr;/*getprevaddress這里修改*/
}
}

輸出:

Lanfrank,John(555)7184581
Dolan,Edith(555)6823104
Acme,Sam(555)8982392

F. c語言動態數組是如何建立和使用的

動態數組,用指針和malloc()函數建立,用realloc()動態調整大小,最後用free()釋放內存。引用與數組一樣。

G. C語言 動態構造 二維數組

你的空間申請有問題,這是幫你改好後的,你可以運行看看。不著調是否幫上你了,如果OK還望採納,和而後~~ #include <stdio.h>
#include <stdlib.h>void 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;i<n;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);for(j=0;j<n;j++)
{
scanf("%d",&p[i][j]);
//printf("%d",p[i][j]);
}
}for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",p[i][j]);
}
printf("\n");
}
system("pause");
}

H. C語言 用函數來創建動態數組,怎麼實現

應該這樣
void CreateArray(int n, int** a)
{
*a = (int *) malloc (sizeof(int) *n);

}

I. C語言 如何動態創建二維數組

這樣的方法可行,不過要是題目要求輸入m和n,然後再定義二維數組a[m][n],那就行不通了。
你可以這樣做:(以int型為例)
int **a;
int m,n,i;

scanf("%d%d",&m,&n);

a=(int**)malloc(m*sizeof(int*)); /*malloc函數在stdlib.h裡面,用的時候加入這個頭文件*/
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));

/*這樣以後你就可以把a當作二維數組a[m][n]來用了。。

J. 使用C語言實現動態數組

你的太亂了的吧磨昌
二維數瞎顫扒組,其實實質是一位數組橫排
為啥用兩個for循環,我看了會頭暈,洞行你的太亂了
#include<stdio.h>
#include<malloc.h>
int main()
{
int *p;
int m,n;
scanf("%d%d",&m,&n);
p = (int*)malloc(sizeof(int)*m*n);
for(int i=0;i<(m*n);i++)
{
scanf("%d",p+i);
}
for( i=0;i<(m*n);i++)
{
print(「%d 」,p+i)
if((i+1)%4==0)
printf("\n");
}
希望對你有幫助