Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android For JNI(二)——C語言中的數據類型,輸出,輸入函數以及操作內存地址,內存修改器

Android For JNI(二)——C語言中的數據類型,輸出,輸入函數以及操作內存地址,內存修改器

編輯:關於android開發

Android For JNI(二)——C語言中的數據類型,輸出,輸入函數以及操作內存地址,內存修改器


Android For JNI(二)——C語言中的數據類型,輸出,輸入函數以及操作內存地址,內存修改器


當我們把Hello World寫完之後,我們就可以邁入C的大門了,今天就來講講基本的一些數據類型,函數之內的

我們先來看一張傳播久遠的圖片‘

這裡寫圖片描述

一.各種數據類型介紹

整型

整形包括短整型、整形和長整形。

短整形

short a=1;

整形

一般占4個字節(32位),最高位代表符號,0表示正數,1表示負數,取值范圍是-2147483648~2147483647,在內存中的存儲順序是地位在前、高位在後,例如0x12345678在內存中的存儲如下:

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b

數據:  78      56        34      12

定義:用int關鍵字,舉例如下:

int a=6;

長整形

long a=10;

浮點型

浮點型包括單精度型和雙精度型。

單精度型

浮點型,又稱實型,也稱單精度。一般占4個字節(32位),

float a=4.5;

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b

數據:  00      00        90      40

雙精度型

一般占8個字節(64位)

double a=4.5;

地址:0x0012ff78  0x0012ff79  0x0012ff7a  0x0012ff7b  0x0012ff7c  0x0012ff7d  0x0012ff7e  0x0012ff7f

數據:  00      00        00      00      00        00      12      40

字符類型

在各種不同系統中,字符類型都占一個字節(8位)。定義如下:

char c=’a’;

也可以用字符對應的ASCII碼賦值,如下:

char c=97;

其實我們可以用一串代碼來闡述上面的意思

#include     
#include    

main(){ 
        //基本數據類型:char int float long short double signed unsigned

       int i = 3;
       char a = 'c';
       //int的格式說明符 %d 
       printf("i的值為%d",i);
       //char的格式說明符
       printf ("a的值為%c",a);
       system("pasue");

        //通用輸出
        system("通用輸出%d",sizeof(short));

       // char int float long shortd的用法和JAVA類似 
       //我們提一下signed unsigned 
       //signed:有符號  unsigned 無符號 
       //舉個例子
       signed int i = 3;  //分正負 
       unsigned int i2 = 3;   //不分正負 

       //字節長度char 1 int 4 float 4 long 4 short 2 double 8

}

是不是清晰明了了,然而我們也是從JAVA走過來的,這些基本上可以一筆帶過了,我們接下來看下C中的函數

二.輸出函數

這裡我們溫習一下上面說到的輸出函數

%d - int %ld – long int %lld - long long %hd – 短整型 %c - char %f - float %lf – double %u – 無符號數 %x – 十六進制輸出 int 或者long int 或者short int %o - 八進制輸出

%s – 字符串

Int len;

Scanf(“%d”,&len);

因為這個JAVA中沒有,所以這裡還是要提一下的

 //C的數組[]要寫在後面 ,而且這個 數組的長度為 8,因為他有一個結束符 \0 
char str [] = {'a','n','d','r','o','i','d',}; 
char str [] = "可以輸入";   //9個字節長度

三.輸入函數

輸入函數大家也不陌生,在JAVA中也有,JAVA的代碼一般都是這樣的

import java.io.*;
public class Test1 {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    String str = stdin.readLine();
    System.out.println(str);
}
}

這樣就可以在控制台輸入東西了,但是C就簡單多了,上面也提到了一個函數 scanf(“%d”,&len);,我們來看看具體怎麼用

#include     
#include    
//輸入函數     
main(){             
       printf("請輸入你的年齡:"); 
       //定義一個變量 
       int age ;
       //設置輸入的類型為int  
       scanf("%d",&age);
       printf("你的年齡為:%d\n",age);
       system("pause"); 

   }

這樣我們來運行一下:

這裡寫圖片描述

這樣就OK了

四.內存地址

內存這一塊,C是可以直接去操作的,這就是他的優勢,同時也是他比較難的一塊了,我們要好好的磨一磨了,內存地址就是內存的地址,內存中所以數據都是通過地址拿到的,就像findviewbyid一樣,我們來看個例子

#include     
#include    

main(){ 
        int i ;  //當i聲明的時候,內存中開辟一個空間,四個字節,無值,分配一個地址 
        i = 5;  //給地址一個值
        printf("%d\n",i); //當我們要輸出這個i的時候其實是通過地址拿到這個5的
        //獲取內存地址        
        printf("%#x",&i);

        //讓窗口停留 
       int age ; 
       scanf("%d",&age);
}

我們通過這行代碼來獲取i的值以及i的地址,打印的結果

這裡寫圖片描述

我們為了更形象的說明,打個比方,比如電腦的系統有32和64位區分,32位的系統最大支持的是4G內存,這是因為32位的系統內存總線的長度為32,也就是可以分配給內存作為地址的數字是2的32次方個

五.內存修改器

修改內存,就像打游戲一樣,你的血量為100,其實就是在內存中定義一個變量,比如int blood = 100,這個blood在內存中開辟一個空間,賦值為100,然後再進行其他操作,我們寫個小例子

#include     
#include    

main(){     
       //時間為60s過關       
       int time = 60;
       int i ;
       //打印i的地址
        printf("%#x\n",&i); 
       for(i = time;i>=0;i--){
         printf("剩余時間為%d\n",i);
         //睡眠,達到遞減的效果 
        sleep(1000); 
     }

        //讓窗口停留 
        int age ; 
        scanf("%d",&age);

   }


邏輯應該看得懂吧,我們定義一個i,然後獲取他的內存地址,再讓他進行倒計時一樣的操作,這就模擬了打游戲,比如一分鐘通關之內的游戲,我們修改i的內存,達到內存修改器的效果

這裡寫圖片描述

然後我們就可以下載Cheat Engine,這個是內存修改器,和八門神器的原理差不多

這裡寫圖片描述

下載地址自己去網上找吧,具體的用法,大家可百度

這裡寫圖片描述

當我們把內存凍結了之後

這裡寫圖片描述vcHL0N64xNPOz7e1xNCnufvBy6Os08DUtrK7u+G1vTCjrNKyvs2yu7vhy8DBy6Os1eLA79Ky1rvKx7L7yvbSu7j21K3A7cW2o6E8L3A+DQo8L2Jsb2NrcXVvdGU+DQo8aDQgaWQ9"似乎節奏越來越快了下節我們學習下指針這樣就會對c有一個清晰的認識了早點把這塊學完對自己也是有莫大的好處的">似乎節奏越來越快了,下節我們學習下指針,這樣就會對C有一個清晰的認識了,早點把這塊學完,對自己也是有莫大的好處的!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved