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

c語言怎麼分配數組

發布時間: 2022-05-26 13:48:19

c語言中結構體數組的大小如何動態分配

結構體類型數據組就和我們平常定義的基本類型的數組一樣,只不過是類型變了。
基本類型數組動態分配大小:
int* a = (int*)malloc(sizeof(int)*10) ; //動態分配10個大小的int類型的內存空間
結構體類型數組分配大小:
struct DIYDEFINE
{
int a;
char ch;
long lnum;
};

DIYDEFINE* pDiy = (DIYDEFINE*)malloc(sizeof(DIYDEFINE)*10); //動態分配10個大小的結構體類型DIYDEFINE的內存空間。

⑵ 怎麼實現C語言裡面數組的動態分配

1 定義指針。
2 使用malloc函數分配內存。
3 對數組進行訪問即可。

對於一維動態數組,直接定義一維指針,並分配內存空間即可。
比如int類型的10個元素動態數組,寫作
int *a;
a = (int *)malloc(sizeof(int) * 10);

如果是多維數組,需要從高維向低維逐層分配。如二維數組10*100空間。
int **a;
int i;
a = (int **) malloc(sizeof(int *) * 10); // 先分配10個int*的空間。
for(i = 0; i < 100; i ++)
a[i] = (int *)malloc(sizeof(int) * 100); // 對於每個int*,分配100個元素的空間。

⑶ c語言:怎樣用malloc函數動態分配二維數組,使之可輸入數組的行數和每行的列數。

這個是可以的,但是和其他網友說的一樣,內存是線性的,當你在語言中分配一個多維數組的時候,編譯器其實也是分配線性內存的,但是我們可以通過模擬來實現類似數組的操作,下面演示一個分配以及操作數組的實例(列數要固定,這里假設列數為4):
int _tmain(int argc, _TCHAR* argv[])
{
int (*p)[4] = (int (*)[4])0;
int row = 3;
int (*mem)[4] = (int (*)[4])0; // 定義數組首指針
mem = (int (*)[4])malloc(sizeof(int(*)[4]) * row); // 分配row行, 4列的數組
// 分別為二維數組的第一維各個元素賦值。
mem[0][0] = 1;
mem[0][1] = 2;
mem[0][2] = 3;
mem[0][3] = 4;
// 列印二維數組的各個元素的值
printf("%d, %d, %d, %d", mem[0][0], mem[0][1], mem[0][2], mem[0][3]);
free(mem);
return 0;
}

不過這里列數必須指定,還有一種方法,這種方法可以保證用戶輸入任意行或列,而不必要將列數定死,演示如下:

int getElement(int* arr, int colNum, int row, int col);
void setElement(int* arr, int colNum, int row, int col, int val);

int _tmain(int argc, _TCHAR* argv[])
{
int *arr = (int*)0;
int row = 3;
int col = 5;
//分配 row 行 col 列的整形數組
arr = (int*)malloc(sizeof(int) * col * row);
// 將最後一個元素值設置為100
setElement(arr, col, 2, 4, 100);
//輸出最後一個元素的值
printf("%d", getElement(arr, col, 2, 4));
free(arr);
return 0;
}
//各個參數說明如下:
//arr: 數組首地址
//colNum:數組列數
//row: 要取得的元素所在行
//col: 要取得的元素所在列
int getElement(int* arr, int colNum, int row, int col)
{
return *(arr + sizeof(int) * (row - 1) * colNum + col);
}

// 此函數用來設置指定行和列的元素的值:
//arr: 數組首地址
//colNum:數組列數
//row: 要取得的元素所在行
//col: 要取得的元素所在列
//val: 要設置的值
void setElement(int* arr, int colNum, int row, int col, int val)
{
*(arr + sizeof(int) * (row - 1) * colNum + col) = val;
}

其實歸根到底,還是對指針的操作,希望可以幫到你,呵呵。

⑷ 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;j<NR;j++){

a[j] = (char *) malloc(sizeof(char) * NC);

}

// 釋放空間: free(a);

編譯錯誤是因為p[j]=(char *)malloc,而不是題目的(char *)malloc(n*sizeof(char))。

(4)c語言怎麼分配數組擴展閱讀:

二維數組的動態分配

二維數組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語言:如何動態的內存分配一個數組且數組的元素是指向char類型的字元串的指針

sizeof(a[5])是數組中第6個元素的長度,應該是1。但是你的數組長度為5,最後一個元素是a[4]哦!
要求整個數組的長度直接用數組名就好了,相當於直接把數組的首地址傳給函數strlen,
strlen(a)就是求得的整個數組佔用的位元組長度,而且應該為5而不是7。因為每個char類型的變數只佔一個位元組!
希望可以幫到你,不會的可以問我。希望採納嘿嘿

⑹ 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語言數組在內存中是怎麼分配的

C語言中內存為分三類:棧區、堆區、靜態數據區。

局部變數在棧上分配,函數調用前的棧指針,要和函數返回後的棧指針一樣,否則就會出錯。

void test(void)

{

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

}

(7)c語言怎麼分配數組擴展閱讀

c語言數組在內存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14};

int b[4] = {21,22,23,24};

int *pa = &a;

int i = 0;

while(i<8)

{

i++;

printf("now *p value = %d and",*pa);

printf("p addr value = %d ",pa);

pa++;

}

return 0;

}

⑻ C語言中怎麼動態分配數組

//---------------------------------------------------------------------------

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

int main(void)
{
int *a=NULL;
int i;
a=malloc(sizeof(int)*10);/*動態創建一個有10個int元素的數組*/

if (a==NULL) { /*a==NULL表示空間分配失敗*/
fprintf(stderr,"MEMORY ERROR");
return -1;
}

for (i = 0; i < 10; i++) {
a[i]=i; /*對數組進行操作*/
}

free(a);/*動態分配的空間需要用free()函數釋放*/
return 0;
}
//---------------------------------------------------------------------------

⑼ C語言二維數組內存是怎麼分配的

二維數組在內存中其實是一個平坦的一維數組,下面具體說明:
int
arr[3][5]

int
arr[15]
所使用的內存區大小是一樣的,都是15*sizeof(int)個位元組。
如果你做下面這樣一個定義:
union{
int
a[3][5];
int
b[15];
}U;
你會發現
U.a
=
&U.b
U.a[0]
==
&U.b[0]
U.a[1]
==
&U.b[5]
U.a[2]
==
&U.b[10]
&U.a[2][3]
==
&U.b[13]
規律是:
&U.a[m][n]
==
&U.b[m*5+n],其中5就是數組a的第二維度。
實際上,二維數組在運行時也是用這樣的公式轉化為對一維數組的訪問。

⑽ c語言怎麼把一個字元數組分成多個數組

可以使用strtok函數把一個字元數組分解成多個字元數組。

1、strtok函數:
原型:char *strtok(char s[], const char *delim);
功能:將一個字元串分解為一組字元串,s為要分解的字元串,delim為分隔符字元串;
說明:當strtok函數在參數s的字元串中發現參數delim中包含的分割字元時,則會將該字元改為 字元。在第一次調用時,strtok()必需給予參數s字元串,往後的調用則將參數s設置成NULL。每次調用成功則返回指向被分割出片段的指針;
頭文件:string.h;
返回值:從字元串s開頭開始的一個個被分割的字元串。分割結束時,返回NULL。所有delim中包含的字元都會被濾掉,並將被濾掉的地方設為一處分割的節點。
2、常式:

#include<stdio.h>
#include<string.h>
intmain(){
charinput[16]="abc,d,ef,g";//待分解字元串
char*delim=",";//分隔符字元串
char*p=strtok(input,delim);//第一次調用strtok
while(p!=NULL){//當返回值不為NULL時,繼續循環
printf("%s ",p);//輸出分解的字元串
p=strtok(NULL,delim);//繼續調用strtok,分解剩下的字元串
}
return0;
}