JNI-C指针语法

JNI-C指针语法

最近看阿里的热修复代码时,发现里面基本都是在c层处理,想着以前也考过c2证书,c语言基础还是比较了解,没想到看到一大堆的*&符号的时候,只记得*符号是用于指针,至于指针怎么用的,现已差不多记不得了。想到如果想精通JNI,则必须先对c指针精通,于是再来温故一下C语法里面的指针

为学习c语法先安装了一个eclipse c++版本,然后再安装minGW,配置其环境。就可以很轻松的在里面像学习java一样学习c了。

 

配置教程: http://blog.csdn.net/sunny2038/article/details/6918602

一定要把mingw32-make.exe 改名成为 make.exe

一定要把mingw32-make.exe 改名成为 make.exe

一定要把mingw32-make.exe 改名成为 make.exe

重要的事情说三遍,我就算没注意看这个,半天在eclipse里面都没找着mingw配置

下面开始学习之旅

指针

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:

 

什么是指针?

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

 

在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:

 JNI-C指针语法_第1张图片

示例

 JNI-C指针语法_第2张图片

输出

 JNI-C指针语法_第3张图片

看打印日志可以看出p存储的是内存地址,这个有点类似于java里面直接对象的toString方法,如果不覆写toString方法,打印的也是对象的内存地址。只不过java里面没有直接打印int类型的地址的方法,内存地址的作用也是操作内存地址指向的那个值,所以基本数据类型似乎拿它的内置地址也没多大作用.

指针的算术运算

指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。

假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:

 JNI-C指针语法_第4张图片

在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。

递增一个指针

我们喜欢在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,因为数组是一个常量指针。下面的程序递增变量指针,以便顺序访问数组中的每一个元素:

 JNI-C指针语法_第5张图片

 

由此可看出数组变量名也是一个指针

C++ 指针数组

 JNI-C指针语法_第6张图片

 JNI-C指针语法_第7张图片

C++ 指向指针的指针(多级间接寻址)

 JNI-C指针语法_第8张图片

 JNI-C指针语法_第9张图片

传递指针给函数

 JNI-C指针语法_第10张图片

从函数返回指针

 JNI-C指针语法_第11张图片

 

 JNI-C指针语法_第12张图片

JNI-C指针语法_第13张图片

无类型指针void*

JNI-C指针语法_第14张图片

 

无类型指针有点类似于Java里面的Object对象。所有指针都可以转换成无类型指针,无类型指针也可以转换为其他类型指针。

 

 

函数指针

函数指针是指向函数的指针变量。

通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

函数指针可以像一般函数一样,用于调用函数、传递参数。

函数指针变量的声明:

 

 JNI-C指针语法_第15张图片

参考网址 无类型指针void*的学习与使用http://blog.csdn.net/playboy_lei/article/details/50560786

参考网址 C教程 http://www.runoob.com/cplusplus/cpp-pointers.html

 

 

你可能感兴趣的:(JNI)