JNI之C語言多級指標剖析
阿新 • • 發佈:2019-01-07
一級指標
假設在記憶體中定義一個一級指標。
#include <stdio.h>
#include <stdlib.h>
main() {
int i = 3;
int * j; //定義一級指標j
j = &i; //把i的地址賦給指標j
printf("%d\n", i); //列印整形變數i的值
printf("%#x\n", &i); //列印整形變數i的地址
printf("%#x\n", j); //列印指標j的值,即變數i的地址(&i)
printf("%#x\n", &j); //列印指標j定義時系統所分配的地址(指標j的地址)
printf("%d\n", *j); //列印指標j的值所對應地址上的值(i的值)
system("pause"); //讓執行視窗暫停
}
總結如下(理解就收穫了):
- 指標的值存放的都是地址。
- 指標即地址,這個地址是指的是系統分配給他的地址
- 在定義指標(int * j)還未程式碼賦值之前,系統做了2件事
- 一是系統為這個一級指標分配了一個地址,這就是這個指標的地址。
- 二是系統為這個一級指標賦了初值,這就是指標的值。這個初值是相對固定的,即他與系統以及配置相關,同一臺電腦每次賦的初值都是一樣的,不同電腦值就不一樣了(涉及到演算法問題)
- j是一級指標,他的值就是賦值給他的地址
- &j是一級指標自身的地址,即定義時系統所分配給他的地址
- *j是一級指標j的值所對應地址上的值(i的值)
二級指標
在上面的基礎之上定義一個二級指標
int ** k; //定義二級指標k,到這一步止電腦同樣做了上述的2件事
k = &j; //給二級指標賦值,值是一級指標的地址
printf("%#x\n", &j); //一級指標j的地址
printf("%#x\n", k); //二級指標k的值
printf("%#x\n", &k); //二級指標k的地址
printf("%#x\n" , *k); //二級指標k的值所對應地址上的值(一級指標的值,即整形變數i的地址)
printf("%d\n", **k); //二級指標k的值所對應地址上的值(一級指標的值),再一級指標的值所對應地址上的值(整形變數i的值)
這裡比較重要的就是最後2點,理解 *k, **k 非常重要
三級指標
int *** m; //定義三級指標m
m = &k; //給三級指標賦值
可總結得到(注:指標的值存放的都是地址)
- m –> 是三級指標m的值
- *m –> 是二級指標k的值
- **m –> 是一級指標j的值
- ***m –> 是整形變數i的值