京洛再无佳人西棠身份:C语言提问

来源:百度文库 编辑:高考问答 时间:2024/04/29 19:52:21
大家知道 怎么用C语言定义一个动态的数组吗?
例如:任意输入N个数,并且输出他们,这个”任意“
是怎么实现的呢?
怎么接收这N个数;当然N是不确定的;
定义数组要给大小,MALLOC又不知道开辟多大的空间。
我说的大家明白了吗?
请各位C高手指教!
小妹SuBOA敬上

可以使用链表构建一个数组类型来模拟:
typedef struct _myArray
{
int data;
struct _myArray *pNext;
}myArray,*myArray;

然后,用户每输入一次就新建一个myArray类型的空间存储,然后把这个空间挂在链表的末尾

#include <memory.h>
#include <stdio.h>
int main(char* a,char** b)
{
myArray *arr=(myArray*)0,*cur,*temp;
int t=0;
cur=arr;/*初始化当前指针指向头指针*/
scanf("%d",&t);
while(t!=-1)/*当输入的数字为-1结束*/
{
temp=malloc(1,sizeof(myArray));/*开辟空间*/
temp->data=t;/*充数据*/
temp->pNext=0;
cur->pNext=temp; /*把新节点挂在链尾*/
cur=temp;/*当前操作指针一直指向最后一个节点*/
}
/*打印*/
cur=arr;/*从头开始*/
if(0==cur)/*空链*/
{
printf("Array is NULL");
return 0;
}
printf("%d\n",cur->data);
while(cur->pNext!=0)/*如果下节点不为空*/
{
cur=cur->pNext;/*移动到下一个节点*/
printf("%d",cur->data);/*显示值*/
}
/*释放链表空间的地方,限于篇幅,不写了:)*/
return 0;
}

还有其他的办法,我通常是喜欢把那个struct结构定义在一个完整的宏里面,呵呵,难看了点,但是实现其他宏函数后更象数组了,这里你可以输入任意数量的数字都可以.每次都是malloc一个节点的空间,最后需要用free释放这些空间,也和打印一样的简单的一个从头到尾的遍历调用free()即可

这是个好问题呀,问得不错~
如果要接收任意输入N个数,可以用链表实现,链表结构如下
typedef struct node
{
int value;
struct node *next
}NODE;/*value中即存放你输入的数*/
NODE head;
head=(NODE*)malloc(sizeof(NODE));

如果一定要用数组,可以用两个变量int len,int cur分别保存当前数组的最大长度和已经使用的长度。
int *array;
int len,cur;
array=(int*)malloc(1*sizeof(int)) /*先分配一个元素的空间*/
len=1;
cur=0;
/*以下是输入数的代码,输入之前先检查cur是否大于len,如果大于,则用realloc扩大array分配的空间,一般是分配当前大小的两倍。输入数后要cur++ */
array=(int*)realloc(array,len*2);
len*=2;

代码可能不太完全,不过大体意思明白就行了吧。

自定义一个链表、或队列即可。

c99有动态数组
c++可以用vector