I. Overview
The C language cannot directly define a dynamic array, and the array must determine the length at initialization time.
If you want to determine the length of the array while the program is running, you need to go to the system to request a piece of memory to implement the dynamic array with dynamic memory allocation.
Two, dynamic memory allocation function 1, malloc () function
void *malloc(unsigned int size)
Allocates a size byte of memory space, returns a pointer to the address, and returns null if the memory is not well-divided. Note: The returned pointer is not of type, so it is used to force type conversion.
2. Calloc () function
void *calloc(unsigned int num, unsigned int size)
This is also the application of dynamic memory space, but it is separated. Apply a total of num bytes of memory space length to size byte.
3. Free () function
void free(void *p)
Releases the pointer p memory space.
This is very important!!! Very IMPORTANT!!! Important!!! 4. ReAlloc () function
void *realloc(void *p, unsigned int size)
The storage space requested for the pointer P is changed to size bytes, and the first address of the storage space (pointer) is returned.
Three, dynamic array implementation 1, one-dimensional dynamic array implementation
Dynamicarrayonedimensional.c
12345678910111213 14151617 181920 21222324 252627 28293031 323334 35363738 |
#include <stdio.h>#include <stdlib.h>/**************************************************Dynamicarrayonedimensional.cEnter n number, averaging**************************************************/Main(){ Int*P=Null,N,I,Sum; Printf("Please enter array size:"); scanf("%d",&N); /* Request address n a contiguous storage space of sizeof (int) */ P=(Int*)Malloc(N*sizeof(Int)); If(P==Null) { Printf("No enough memory!\ n"); Exit(0); } Printf("Please enter the score:"); For(I=0;I<N;I++) { scanf("%d",P+I); } Sum=0; For(I=0;I<Ni++) { span class= "n" >sum = sum + * (p + i) } printf ( " aver =%d\n " sum/ n); free (p } /span>
|
2, two-dimensional dynamic array implementation
Dynamicarraytwodimensional.c
123456789101112131415161718192021st22232425262728293031323334 35363738 394041 42434445 464748 49505152 535455 56575859 |
#include <stdio.h>#include <stdlib.h>IntFindmax(Int*P,IntM,IntN,Int*PRow,Int*Pcol);IntMain(){ Int*Pscore=Null,I,J,M,N,Maxsocre,Row,Col; Printf("Please enter array size m,n:"); scanf("%d,%d",&M,&N); Pscore=(Int*)Calloc(M*N,sizeof(Int)); If(Pscore==Null) { Printf("No enough memory!\ n"); Exit(0); } Printf("Please enter the score:\ n"); For(I=0;I<M;I++) { For(J=0;J<N;J++) { scanf("%d",&Pscore[I*N+J]); } } Maxsocre=Findmax(Pscore,M,N,&Row,&Col); Printf("Maxsocre =%d, class =%d, Number =%d\ n",Maxsocre,Row+1,Col+1); Free(Pscore); Return0;}IntFindmax(Int*P,IntM,IntN,Int*PRow,Int*Pcol){ IntI,J,Max; Max=P[0]; *PRow=0; *Pcol=0; For(I=0;I<M;I++) { For(J=0;J<N;J++) { If(P[I*N+J]>Max) { max = span class= "n" >p[i*n+ j *prow = i;< Span class= "line" > *pcol = j;}} } return (max
|
C language Dynamic array implementation