掌握API和控制点(从Java到JNI接口)_29 JNI架构原理_Java与C的对接02

目录

2、 EIT造形的Java实现

3、 EIT造形的C语言实现

2.1 复习: C语言的结构(struct)

2.2 复习: 结构指针(Pointer)

2.3 复习: 动态内存分配


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指向此区域了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思忖小下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值