JNI学习之C语言第4天



#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Windows.h>
//结构体是一种构造数据类型
//把不同的数据类型整合起来成为一个自定义的数据类型
//类似于java里的类
/*
struct Man{
//成员
char* name;
int age;
int(*func)();
};
*/
/*
void main(){
//初始化结构体的变量
//1
struct Man m1 = {"Fourlm",21};


//2
struct Man m2;
m2.age = 21;
m2.name = "fourlm";


printf("%s,%d\n",m1.name,m1.age);


getchar();
}
*/


//结构体的几种写法
//1。 m1表示结构体的变量名称。可以直接用m1.name。变量名称
/*
struct Man{
char name[20];
int age;
}m1, m2 = {"jack",21};
*/


//匿名结构体,
//主要是控制结构体变量的个数();相当于单列
/*
struct{
char name[20];
int age;
}m1;
*/


//结构体嵌套
/*
struct Teacher{
char name[20];
};


struct Student{
char name[20];
int age;
struct Teacher t;
};


void main(){
//字面量方式
struct Student s1 = { "jack", 21, {"jason"} };


struct Student s2;
strcpy(s2.name,"jack");
s2.age = 21;
strcpy(s2.t.name,"jason");


getchar();




}
*/


/*
struct Student{
char name[20];
int age;
struct Teacher{
char name[20];
}t;
};
*/


//结构体与指针
/*
struct Man{
char name[20];
int age;


};


void main(){
struct Man m1 = {"Jack",20};
//结构体指针
struct Man* p = &m1;
printf("%s,%d\n",(*p).name,(*p).age);


//另一种写法.jni上常用  ->(箭头) 是"(*p)"的简写形式
printf("%s,%d\n",p->name,p->age);
getchar();
}
*/


//指针与结构体数组
/*
struct Man{
char name[20];
int age;
};


void main(){
struct Man mans[] = { { "jack", 20 }, {"rose",19} };

//遍历结构体数组 ,
struct Man* p = mans;
//sizeof(mans)获取mans在内存的字节长度,除以Man的字节长度,得到mans的长度
//1
for (; p < sizeof(mans)/sizeof(struct Man); p++){
printf("%s,%d\n",p->name,p->age);
}


//2
int i = 0;
for (; i < 2;i++){
printf("%s,%d\n",mans[i].name,mans[i].age);
}




getchar();
}
*/


//结构体的大小(字节对齐);结构体字节大小必须是最宽基础类型的整数倍。所以输出为16
/*
struct Man{
int age;
double weight;
};


void main(){
struct Man m1 = {20,89.2};


printf("%#x,%d\n",&m1,sizeof(m1));
getchar();


}
*/




//结构体与动态内存分配
/*
struct Man{
char *name;
int age;
};
void main(){
struct Man *m_p = (struct Man*) malloc(sizeof(struct Man)*10);
struct Man* p = m_p;
// 赋值
p->name = "jack";
p->age = 20;
p++;
p->name = "rose";
p->age = 29;


struct Man *loop_p = m_p;
for (; loop_p < m_p + 2; loop_p++){
printf("%s,%d\n",loop_p->name,loop_p->age);


}
free(m_p);
getchar();
}
*/


//typedef 类型取别名
//1.不同的类型干不同的事情typedef int jint;
//2.不同情况下,不同的别名
//if defined(_cplusplus)
//typedef _JNIEnv JNIEnv;
//3.书写简洁
//Age int 类型的别名
/*
struct Man{
char name[20];
int age;
};
typedef int Age;


//Ap int类型指针的别名
typedef int* Ap;


typedef struct Man JavaMan;


typedef struct Man* Jvm;


//结构体取别名,简写
typedef struct Woman{
char name[20];
int age;
}Woman,*W;//Woman 是Woman结构体的别名, *W是Woman结构体指针的别名


void main(){
Age i = 50;
Ap p  = &i;
printf("%d\n",*p);
//结构体变量
Woman w1 = { "rose", 20 };
//结构体指针
W wp1 = &w1;
printf("%d,%s\n", wp1->age, wp1->name);
getchar();
}
*/


//结构体函数指针成员
/*
typedef struct Woman{
char* name;
int age;
//函数指针
void(*sayHi)(char*);
}W;
//Woman 结构体类似于java中的Woman类,name 和age类似成员变量, sayHi类似于方法
*/
void *sayHi(char* text){
MessageBox(0,text,"Title",0);
}
/*
void main(){
struct Woman w1;
w1.name = "lucy";
w1.age = 20;
//给结构体函数指针赋值
w1.sayHi = sayHi;


//调用结构体函数指针
w1.sayHi("");
getchar();
}
*/


//JNI做法
typedef struct Girl{
char *name;
int age;
//函数指针 sayHi函数名 ,char* 形参,void,返回参数
void(*sayHi)(char*);
}Girl;
typedef Girl* GirlP;


void main(){
Girl g1;
g1.name = "Lucy";
g1.age = 29;
g1.sayHi = sayHi;


GirlP g2 = &g1;


g1.sayHi("Hello");
g2->sayHi("Byebye");
getchar();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值