NDK探究之旅《四》——指針的強化理解

NDK探究之旅:

NDK探究之旅《一》——對jni和NDK的認識android

NDK探究之旅《二》——C語言的基本認識bash

NDK探究之旅《三》—C語言的輸入輸出函數微信

什麼是指針

所謂指針就是 一塊內存內存空間或者說 內存地址函數

64位和32位

好比說咱們的電腦:學習

  • 32位
    • 32位能夠表示一個int類型,咱們都知道一個int能夠表示2的32次方內存空間。2的32次方爲2^32 = 4 294 967 296,4 294 967 296 / 1024 / 1024 / 1024 = 4G
    • 所以一個32位的操做系統最多能支持4G的運行內存。
    • 計算機中有有一些內置的硬件和軟件須要申請到內存地址。所以留給用戶的可能不足3個G
  • 64位

爲何要用位來表示呢ui

位表示內存地址時所採用的不一樣方式。spa

注意:C99語法中,for循環不支持在()裏面定義int變量值。操作系統

*號的含義

#include <stdio.h>
main(){
       int i = 3;//申請一快內存地址,大小爲4個byte,用於儲存int類型的數據
       printf("int類型所暫居的byte爲:%d\n",sizeof(int));  

       int* p;//指針類型 
       //一、申請一塊內存地址,空間爲32位  ,大小爲32位 
       //二、int* 建立出來p存放一個內存地址(大小爲32位,4個byte就夠用了) 
      //注意:無論任何類型的帶*的變量都是32位的 
       //三、 建立一個int* 的數據類型,p是他的變量名
       //四、p裏面存放的是一塊內存空間的地址 
       p =  &i; 
       printf("i的內存空間的地址爲: 0x%x\n",p); 
       printf("i=%d\n",i);
       printf("i=%d\n",*p);//取內存空間p裏面的數據 
       system("pause");
}複製代碼
*的含義有三點
  • *緊跟着一種數據類型前面int* 表示的是一種指針變量,指的是取內存控件的地址
  • 若是是跟在一個指針變量的前面 *p,表示的是去內存空間裏面的數據,*p把p地址裏面的數據取出來.net

  • x*y乘以指針

指針變量和指針的區別

指針變量: 指的是一個變量,int* p;則p就是指針變量

指針: 一塊內存空間的地址

一些市場上的各類說法——指針和指針變量沒有什麼區別。

值傳遞和引用傳遞

  • 準確的來講只有值傳遞,調用子函數的全部操做都是值傳遞

  • 引用傳遞,最終仍是值傳遞,傳遞的是對象的地址

示例代碼:

#include <stdio.h>

void changedNum(int i,int j){

       printf("i=%d\n",i);
       printf("j=%d\n",j);
       int temp;
       temp = i;
       i = j;
       j = temp; 
        printf("i=%d\n",i);
       printf("j=%d\n",j);


}

main(){
       int i = 3;
       int j = 5;
       changedNum(i,j);
       printf("i=%d\n",i);
       printf("j=%d\n",j);

        printf("************************************************\n");
         int* p = &i;
         printf("i的地址爲%d\n",p);
         printf("改變i的值,並打印p的值\n");
         i = 100; 
         printf("i只改變後的地址爲%d\n",p);
         printf("改變p的值打印I的值\n"); 
         p = &j;
         printf("改變p的值後去打印:i = %d\n",i);
        system("pause"); 
}複製代碼

指針的常見錯誤錯誤

  • 使用指針變量時,必須先給其進行負值,在使用

int* p ;//申明出來一個指針變量,用於存放內存地址

printf("p=%d\n",p);
野指針,不容許這樣

  • 數據類型必定要匹配,什麼類型的數據,就須要用什麼樣的數據類型

    double d = 3.222222;

    double* p =&d;

  • 不能直接給指針變量進行賦值

    下面是錯誤的寫法

    doble* p = &2.123123

  • 不能直接用內存地址16進制去賦值(其實和上面同樣)

    //錯誤的寫法

    int* p =0x123123;

博客地址:

blog.csdn.net/androidstar…

相信本身,沒有作不到的,只有想不到的

若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :232203809
微信公衆號:終端研發部

技術+職場
技術+職場

(歡迎關注學習和交流)

相關文章
相關標籤/搜索