| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1382 人关注过本帖
标题:C中如何实现泛化数组
只看楼主 加入收藏
橙子汁
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-8-30
收藏
 问题点数:0 回复次数:15 
C中如何实现泛化数组
就是想建立一个数组,逐个的存入一些数字,但是不知道到底存入多少个!
那存入后如何访问什么的。。
谢谢,请高手指点
搜索更多相关主题的帖子: 泛化 
2007-09-10 17:03
jinxin3256
Rank: 1
等 级:新手上路
帖 子:196
专家分:0
注 册:2007-9-7
收藏
得分:0 
a[]?

代替leisure1980广告下: 群号45146331
2007-09-10 17:41
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
你建立的一个数组,你一定要给出数组的大小,这是确定的,要不然,编译通不过.
当你知道了数组的大小,就可以控制最多可以存放数字的多少.
然后,对数组进行初始化工作.例如,要存放的是字符数据,由于字符数据的值>=0.
你就可以将数组的所有元素都初始化为-1.
存放的时侯,先判断有没有超出数组范围,然后再判断相对应下标的元素是不是为-1,
如果为-1,表示可以存放,否则,不可以.
访问的时侯,也就是判断有没有超出范围,再判断元素是否为-1.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-09-10 17:55
B2Mouse
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2007-9-4
收藏
得分:0 
我想楼主遇到的题目是先输入一个数n,在存入n个数吧,在读出这么多个数,如果是这样的话。。。

可以定义一个大一点的数组如a[200],我想一般题目要输入的数n都不大吧,然后就可以
for(int i=0;i<n;i++)
scanf("%d",&a[i]); // 如果输入的是整数的话

读出就可以是: for(int j=0;j<n;j++)
printf("%d ",a[j]);


貌似这个也可以用链表来做,这样就可以动态分配了,但输入的数n还是不能太大吧,毕竟内存有限的阿。。。

2007-09-10 18:19
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
用链表做了就不是数组了。

我首先想到的是C++中的vector,以前见过有人用C写面向对象风格的代码,记得不是很清楚,根据自己的理解我写了下面的一种实现方法:
[CODE]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

//=============================Starting to define my Array class=========================

//-----------------------------Declaration segment-------------------------
typedef int DataType;
typedef struct array{

DataType *Data;
int size,max_size;

void (*Input)(DataType , struct array *);
void (*Constructor)(struct array *);
void (*Destructor)(struct array *);
}Array;

void Init(Array *this);
void _constructor(Array *this);
void _denstructor(Array *this);
void _input(DataType data, Array *this);

//------------------------------Implemen segment---------------------------

void _input(DataType data, Array *this)
{
int i;
DataType *ptr;

if(this->size >= this->max_size)
{
this->max_size +=10;
ptr=(DataType *)malloc(this->max_size*sizeof(DataType));

for(i=0;i<this->size;i++)
ptr[i]=this->Data[i];

free(this->Data);
this->Data=ptr;
}

this->Data[this->size]=data;
++(this->size);
}


void _constructor(Array *this)
{
this->size=0;
this->max_size=10;
this->Data=(DataType *)malloc(this->max_size*sizeof(DataType));
}

void _denstructor(Array *this)
{
free(this->Data);
}


void Init(Array *this)
{
this->Input =_input;
this->Constructor =_constructor;
this->Destructor =_denstructor;

this->Constructor(this);
}

//===================================definition end===============================


// 使用示例
int main()
{
Array MyArray;
Init(&MyArray); //使用对象前必须初始化,间接调用构造函数

MyArray.Input(1,&MyArray);
MyArray.Input(2,&MyArray);

printf("The elements of MyArray : %d,\t%d",MyArray.Data[0],MyArray.Data[1]);
getch();

MyArray.Destructor(&MyArray); //使用对象后必须显式调用析构函数

return 0;

}
[/CODE]


可惜C不支持template,不能做成模板;函数不能隐式传递this指针,不得不显示加入this;不支持运算符重载,不能使用[]直接访问元素;否则可以写出更加优雅的代码。

如果大家可以用C写出更加OO的code欢迎跟贴讨论。
2007-09-10 21:21
google
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:3419
专家分:23
注 册:2005-11-1
收藏
得分:0 

[CODE]#include <stdio.h>
#include <stdlib.h>

int main()
{
int *PData;
int PDataCount=0;
PData = (int*) malloc( sizeof(int) );
while(1)
{
scanf("%d",&PData[PDataCount]);
for(int i=0;i<=PDataCount;i++)
{
printf(" %d ",PData[i]);
}
printf("\n\n");
PDataCount++;
PData = (int*) realloc( PData,sizeof(int)*(PDataCount+1) );
}
return 0;
}[/CODE]


祝天下所有母亲幸福安康!~
2007-09-10 23:20
zrgong
Rank: 1
等 级:新手上路
帖 子:95
专家分:0
注 册:2007-6-26
收藏
得分:0 

用动态数组啊


2007-09-10 23:26
橙子汁
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-8-30
收藏
得分:0 
谢谢哦

2007-09-11 10:32
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
我也知道可以用简单的动态分配内存,不过用一个对象来维护动态数组更方便吧,C++ 中的vector就是个好例子。

希望有人讨论下C中面向对象的实现技巧。

2007-09-11 11:37
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

C就是C,C++就是C++

如果C用你在5楼的方式来实现,它就不是C了;如果C++用我在6楼的方式实现,它也不是C++了


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-09-11 11:50
快速回复:C中如何实现泛化数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017709 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved