Android NDK開發的C語言指針總結

我又來報道了,睡了一天,美滋滋。java

最近一直想加深關於Android 經過jni的方式封裝成SDK的學習和掌握;晚上跟人聊天時候,意識到單純的牢牢是掌握java和c語言之間的互相調用仍是不夠。

緊接着我分析了JNI開發遇到的問題和困惑的問題:函數

1:怎麼解決Android設備內核的適配問題,相似聯想的X86內核等; 2:怎麼經過jni控制CUP的頻率; 3:等等等好多須要考慮的;學習

而後我就發現了,有必要從新的學習下C語言了,PS:通過個人調研,jni仍是用C比較好,起碼兼容性很好。3d

PS:大學c語言課程的專用電腦,因此我C很差是有緣由的!

指針入門:指針

指針其實表明的就是內存地址,地址就是系統給內存分配的編號;cdn

指針變量:存放地址的變量;blog

int i=3;//定義一個int類型的變量i i的值是3內存

&i;//獲得i的地址開發

int* p=&i;//定義一個指針變量p 此時p的值就是i的地址;it

PS:注意指針和指針變量的概念不一樣,不少資料混淆了二者的概念,指針是內存地址;指針變量是存放地址的一個變量;

eg:

問題:

此時我修改i的值 ,p的值會變麼,答案是不會的,由於p變量仍是i的內存地址,因此不變;

此時我讓p=&j;我們再輸出p會變麼,是會的,由於p此時已經指向了j的地址啦。

下面纔是我想說的重點:

那*p呢, *p表明的是p變量的值指向內存地址所對應的值;p變量的值是內存地址,*p就是取p所對應內存地址中具體的值;

總結:

int* p=&i;

此時修改*p的值 i的數值會發生變化(p=5;),修改i的值那p也會變化從新賦值(i=9);

常見錯誤:

int* p;

printf("*p的值爲%d",*p);此時不會報錯,這就是典型的「野指針」,系統會隨機的安排內存地址(window默認不能訪問系統內存,可是能夠提高權限);

float f=2.22; int* p; p=&f;此時是不行的,指針的類型也要一一對應,int類型的指針變量不能接受float類型的「地址」,若是是float類型的指針就不會有問題了。

在Java中我們都知道能夠經過值傳遞的方式交換兩個數,可是C可不行呀,如圖

他們的數值不會發生任何變化,由於在C中子函數執行結束後,內存也就被回收了

我們能夠經過指針來實現值傳遞(引用傳遞也叫指針傳遞)

Ps:Java創始人說在Java中沒有引用傳遞,可是Java的做者說有引用傳遞,兩位神仙也一直在爭論,吃瓜吃瓜。

我們能夠用指針返回多個數據類型,我想經過一個方法返回多個值:

還有一點就是多級指針的問題,你們請看:

輸出:

我如今想經過x修改i的數值咋辦呀?不要慌,問題不大!!一圖勝千言:

最後說一下*的優先級特別的低,記得(*p).month;

很差意思各位,先寫這些,之後還會補充,困迷糊了,有任何疑問歡迎留言,祝好。

相關文章
相關標籤/搜索