C语言如何定义动态数组

Python011

C语言如何定义动态数组,第1张

C语言定义动态数组需要用到动态内存分配函数,参考代码如下:

#include<stdio.h>

#include<stdlib.h>

int

main()

{

int

*a=NULL,n,i

scanf("%d",&n)

a=(int

*)malloc(n*sizeof(int))

for(i=0i<n++i)

a[i]=i

for(i=0

i<n

++i)

printf("%d

",a[i])

free(a)

a=NULL

return

0

}

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个元素的空间。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <malloc.h>

#define RND_MAX 100

#define RND_MIN 50

#define MAX 200

/*用于产生随机数*/

void GenData()

{

FILE *fp = fopen("Random.txt", "w")

int i

int mod = RND_MAX - RND_MIN

int num

if(fp==NULL) return

srand(time(NULL))

num = rand() % mod + RND_MIN

for(i=0i<MAXi++)

{

num = rand() % mod + RND_MIN

fprintf(fp, "%d,", num)

}

fprintf(fp, "%d", num)

fclose(fp)

}

void GetData(int *a, int n)

{

FILE *fp = fopen("Random.txt", "r")

int i

char x

int *p = a

if(fp==NULL) return

for(i=0 i<n && !feof(fp) i++)

fscanf(fp, "%d%c", p++, &x)

fclose(fp)

}

void Display(int *a, int n)

{

int i

for(i=0i<ni++)

{

printf("%d", a[i])

if(i%8 == 7) printf("\n")

else printf("\t")

}

printf("\n")

}

double GetAverage(int *a, int n)

{

int count = 0

int i

for(i=0 i<n i++) count += a[i]

return (double)count / n

}

int GetIndex2(int *a, int n, double x)

{

int index = n-1, i

double min = (a[index] - x) * (a[index] - x), pc

for(i=n-2i >= 0i--)

{

pc = (a[i] - x) * (a[i] - x) /* 保证偏差都是正数,以便于比较 */

if(min > pc)

{

index = i

min = pc

}

}

return index

}

int GetIndex1(int *a, int n, double x)

{

int index = 0, i

double min = (a[index] - x) * (a[index] - x), pc

for(i=1i<ni++)

{

pc = (a[i] - x) * (a[i] - x)

if(min > pc)

{

index = i

min = pc

}

}

return index

}

void main()

{

int * a = NULL, n, readNum, index

double aver

char c

/*GenData()*/ /*用于生成一个随机数的文件*/

while(1)

{

printf("请输入元素个数(0退出):")

readNum = scanf("%d", &n)

if(readNum == 1)

{

if(n == 0) break

if(a)

{

free(a)

a = NULL

}

a = (int *)malloc(sizeof(int) * n)

GetData(a, n)

printf("原始数据:\n")

Display(a, n)

aver = GetAverage(a, n)

printf("平均值: %.6f\n", aver)

index = GetIndex1(a, n, aver)

printf("与平均值最接近的下标最小的元素:a[%d] = %d\n", index, a[index])

index = GetIndex2(a, n, aver)

printf("与平均值最接近的下标最大的元素:a[%d] = %d\n", index, a[index])

}

else

{

printf("输入错误,请输入一个数字!\n")

while((c = getchar()) != '\n' && c != EOF) /*清除输入缓冲*/

}

}

}