JNI之C语言简单回顾

一.C语言基本数据类型:
c语言中 char, int, float, double, signed, unsigned, long, short and void
// java 中的8大本数据类型和他们的长度
// byte 1 char 2 short 2 int 4 long 8 double 8 float 4 boolean 1

// 在c99标准的c语言.没有 byte 类型 没有boolean 类型
// 在c语言里面 0表示的是假 非0表示的是真
// sizeof(); 获取某种数据类型的长度 , 接受一个参数(数据类型)

// c语言中的char类型是1个字节 java里面char是两个字节
// c语言中的char的长度 和 java中的byte的长度相同 ,所以可以用 c 语言中的char类型 表示 java中的byte类型
// c语言中的int 和 java中的int在内存中的长度相同 所以java的int 和c语言中的int 可以互相代替使用.

// c语言中long类型是4个字节 java中的long类型是8个字节


二. C 语言的输入函数
//scanf();
// java 语言里面有一个数据类型 叫String 字符串
// c语言里面 是没有String类型
// c语言表示一个字符串 定义一个字符的数组
// 利用scanf %s 的方式 可以方便的从键盘获取一个字符串

三。 指针入门:
// 指针代表的就是一个内存地址. 内存地址 可以用一个指针来表示.
// 地址就是一块内存空间的编号,通过这个编号 我们可以使用以一块内存空间.

// 指针变量: 可以存放指针类型(内存地址数据)数据的变量 指针变量.
// 使用* 来表示指针变量.
// int* 代表的就是一个表示int类型数据地址的变量

补充*号的几种作用.
// 3*5 1.*号的第一种作用 代表的是相乘的操作.
// 2.在一个数据类型的后面 跟上一个*号 代表就是这种数据类型的指针变量
// 3. 在一个指针变量前面加上一个*号 代表的是 访问这个指针变量里面存放的地址里面存储的内容.
函数指针
int (*pf) ( int x, int y); // 定义一个函数的指针 这个函数 返回值为int 接受两个int类型的参数

四.指针使用的常见错误:
指针的常见错误一:


//指针变量的类型 要跟 存放数据的类型 必须要对应
// int类型的变量的地址 要用int*来表示.
// float类型变量的地址 要用float* 来表示.

指针的常见错误二:
int i = 5;
int* p ;
printf("*p=%d\n",*p); // 如果p变量没有进行初始化, 里面存放的是一个垃圾值 混乱值.
// *p 访问了一块不知道的内存 (野指针)

// 指针变量 未经赋值 ,不能使用.
// 如果修改一个野指针指向的内存空间,可能会出现严重的错误.

//window操作系统 提供了一些api 提升父进程的权限.

五: 指针的长度

//所有数据类型的指针长度 都是4个字节
//32位的操作系统, 要想表示一个地址 2的32次方个地址.
//指针类型的 作用主要就是在指针运算的时候 起作用. 在获取指针所指向的数据的时候 起作用.
六. 多级指针

七. 手动分配内存
栈内存会被系统自动回收,不能被手动回收
堆内存不会被系统自动回收,需要由程序员手动回收



八. 结构体,联合体和枚举,自定义类型
结构体:
struct Student //此写法为最标准写法
{
int age; // 4
float score; // 4
long id;// 4
char c; // 为了方便处理,也分配为4

//不同的编译器 处理的结果可能 不同
} ;


三种写法:

第一种
struct Student
{
int age;
float score;
char sex;
}

第二种
struct Student2
{
int age;
float score;
char sex;
} st2;

第三种
struct
{
int age;
float score;
char sex;
} st3

联合体
union {double d; long i; int k; char ii; } mix;

typeof给一个变量定义一个别名

你可能感兴趣的:(jni)