目录
2、 EIT造形的Java实现
- 到目前为止,你所看到的EIT造形,几乎都是以Java代码来实现的。例如:
- 以上,无论是<E>、 <I>或<T>都是以Java撰写的代码实现。
3、 EIT造形的C语言实现
2.1 复习: C语言的结构(struct)
- 定义结构型态。商品有牌子﹐ 定义型态就像描述一件商品的品牌。例如:
- 再如:
- 这说明了﹕smile 结构内含3 项数据──两项字符数据﹐ 另一项浮点数数据。
- 接着,根据所定义之结构来宣告结构变量。宣告结构变量就像「订」礼盒。例如﹕
- 这订购两个Smile 生日礼盒,一个给x﹐ 另一个给y。
- 再来﹐ 请看如何向计算机「订」结构变量(Structure Variable)﹖
struct smile x, y; - 共宣告了2个结构变量﹕x 和y 为smile 结构之变量。亦即﹐x 及y 变量的型态是:struct smile。
/* cx-01.c */
#include <stdio.h>
struct smile
{
char sna;
char size;
float price;
};
int main(void)
{
struct smile x;
x.sna = 'M';
x.size = 'B';
x.price = 20.5;
printf( "%c, %c, %.1f", x.sna, x.size, x.price );
return 0;
}
- 先定义结构型态──struct smile。
- 说明了﹕struct smile型态包含char型态及float 型态的数据。进入main()函数﹐ 就诞生了自动变量x。
- 此时x 变数内含sna 、 size及price 三个项目。程序里以以x.sna、 x.size及x.price 表示之。
2.2 复习: 结构指针(Pointer)
- 宣告结构指针﹐ 来指向结构变量。例如﹕
/* cx-02.c */
#include <stdio.h>
#include <string.h>
struct smile {
char sna;
float price;
};
int main(void)
{
struct smile x;
struct smile *px;
px = &x;
px->sna = 'R';
px->price = 26.8;
printf( "Sna=[%c], Price=%.1f", x.sna, x.price );
return 0;
}
- px是struct smile型态的指针﹐x 是structsmile型态的变量﹐px可以指向x 变量。
- “&” 运算能把x 变量的地址存入px中﹐使得px指向x 变量。
- 指令:
px->sna = 'R';
px->price = 26.8;
- 把数据存入结构(变量)里。
2.3 复习: 动态内存分配
- 「动态」 (Dynamic) 的意思是﹕ 待程序执行时(Run-Time)才告诉计算机共需要多少内存空间﹐ 计算机依照需要立即分配空间﹐ 裨储存数据。
- malloc()和free()是最常用的动态内存分配函数。如果在执行时需要空间来储存数据﹐ 宜使用malloc()函数。用完了就用free()释放该空间。 malloc()之格式为﹕
指针 = malloc( 空间大小 ) - 例如﹕ ptr = malloc(100);
/* cx03.c */
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
struct kiki {
char na[10];
short int age;
};
typedef struct kiki NODE;
int main(void) {
NODE *pn;
pn = (NODE *) malloc (sizeof(NODE));
if( pn==NULL )
{
printf("malloc() failed\n");
exit(0);
}
strcpy( pn->na,"Alvin");
pn->age = 28;
printf("AGE=%d", pn->age);
free(pn);
return 0;
}
- typedef 指令定义的新型态──NODE是struct kiki 的别名。
- 如果你计算机的sizeof(NODE)值为16﹐malloc()就索取16 bytes的空间﹐ 并令pn指向此区域了。