程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言指針強制類型轉換

C語言指針強制類型轉換

編輯:關於C

一、舉例說明

        \

        上圖對應函數調用為int printf(const char *fmt, ...),fmt為char *指針類型,所以共占了32位字節,但是*fmt執行的是一個字節,*fmt++執行的是下一個字節,&fmt得到一個32位地址,(char *)&fmt得到是一個執行字節的指針,(char *)&fmt+4後正好執行了var3,因為fmt占用4個字節。(int *)((char *)&fmt+4),又將其轉換為執行4個字節的指針,此時*((int *)((char *)&fmt+4)),那麼取出來的數字變是32位的數據,也就是var3。

       總結:強制轉換為char *,那麼指針++後移動一個字節,*指針得到一個字節。強制轉換為int *,那麼指針++後移動4個字節。同時*指針得到4個字節。

       無論什麼類型的指針變量,相減後得到的都是相差的個數。

 


二、什麼時候需要強制類型轉換


[cpp]
#include <stdio.h>  
#include <stdlib.h>  
int main() 

    int a =6336; 
    char *b = (char *)&a; 
    printf("%d",*b); 
    getchar(); 
    return 0; 

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int a =6336;
 char *b = (char *)&a;
 printf("%d",*b);
 getchar();
 return 0;
}
       此時得到的結果為-64,因為*b只指向一個字節。

      

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved