C语言中如何将未知个数的数存放在一个数组中?

如果想将未知个数的一些数存放在一个数组中应该怎么办呢?因为C语言中数组不能这样使用:int n;scanf("%d",&n);int a[n];那如果我想将一些数(未知个的数)存放在一个数组中应该怎么办呢?老师说可以用指针,但我指针都学完了还是不知道该如果用指针将这些数存放在一个数组中(如果不用指针也行)。举个例子,假设有一个结构体:struct information{char name[10];int birthday;char telephone[15];}student[N];/*这是个结构体类型,定义一个结构体数组student[](其中N的值是不确定的或者说是可以改变的,具体值是不知道的,但我想将这N个学生的信息存放在student这个数组中,应该怎么办呢?)。*/这个例子也就和我刚开始的那个问题是一个道理,就是如何将未知个的数存放在一个数组中?请写出详细解答(代码),谢谢!

在C语言中数组的定义必须指明维数,即使没有指明维数,也必须进行初始化,编译器通过初始化列表中的元素个数来确定数组的维数,比如下面的代码:

int a[] = {1,2,3}; 

虽然没有指明数组的维数,但是编译知道数组a的维数是3(只有三个元素)。


要实现未知个数的元素存储于数组中,可以使用malloc()和free()来进行动态内存分配 。下面是一个使用动态内存的示例:

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

int main()
{
int size;
printf("输入建立元素的个数:");
scanf("%d",&size);
int *p = (int *)malloc(sizeof(int) * size);
if (p == 0) {
printf("不能分配内存\n");
return 0;
}

//初始化内存
memset(p, 0x00, sizeof(int) * size);
//释放内存
free(p);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-22
因为数组的内存空间是连续的,所以可以直接用指针来操纵。用指针的方法叫动态数组。
如你那题。
struct information *student;
int n = 0;
scanf("%d", &n);
student = (stuct information *)malloc(n * sizeof(struct information));
这样就分配了一个可以存储n个结构体对象的空间了,把这个空间的地址存储在指针变量中。
这个空间就和数组的空间是一样的(连续n个结构体对象),所以就可以通过操纵指针来操纵空间了。
可以用student[1].name student[2].name这样的形式, 也可以用*(student + 3).name这样的形式。 可否明白。本回答被网友采纳
第2个回答  2012-03-22
其实看到你这个问题的时候我兴奋了一下,我以为会有人来解。但是,还没有人给答案,这样的思考我也思考了很久,可是好像在C或C++里面都不行吧……如果有人能做到请告诉我一下,对了我是学生,以后专业上的知识可以多交流一下,QQ826266386网名就是我的真实名字
第3个回答  2012-03-22
#include "stdio.h"
#include "string.h"
#include "dir.h"

void main()
{
char filename[500][60];
int i,num=0,done;
struct dfree dfree;
struct ffblk ffblk;

done = findfirst("*.txt",&ffblk,0);
while (!done)
{
strcpy(filename[num], ffblk.ff_name);
num++;
done = findnext(&ffblk);
}
for(i=0; i<num;i++)
printf("%s\n",filename[i]);
}
第4个回答  2012-03-22
动态内存分配本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网