指標的強制類型轉換

來源:互聯網
上載者:User
指標的強制類型轉換

這個問題困惑很久了,今天上午終於弄明白了 *_*;

先看下面的例子

#include <stdio.h>
   int main(void){
       int *ip;
       int a[2]={0x301,0x44444444};
       ip = a;
       printf("*ip=%x,          *(ip+1)=%x/n",*ip,*(ip+1));
       printf("*(char *)ip=%x,  *((char *)ip+1))=%x",*(char *)ip,*((char *)ip+1));
       return 0;
    }

運行後的結果如下

其實放在記憶體的內容都是二進位編碼,只是拿出來的類型依照指標類型而定,更確切的應該說成只是在處理記憶體時是依照指標類型而定,比如用(char *)作強制轉換,則將來處理相應的記憶體位址時是按位元組為單位處理的,如果用(int *)則將按4個位元組為單位進行處理,它們的差異會是巨大的。

現在我們來分析上面的結果

1.int *ip 按四個位元組取值,由於a是int數組,所以每個元素都是int型的,前四個位元組是Ox0301,後四個位元組是0x44444444

2.char*ip按一個位元組取值,a的分析同上,由於0x代表16進位,所以0x0301每個數字佔用4位,以個位元組是8位,所以頭一個位元組是低位01,第而個位元組是高位03

*((char *)ip+1) *((char *)ip)就使用了強制類型轉換,呵呵,明白了吧

本文轉自:http://blog.myspace.cn/e/401196777.htm 謝謝Jonny的分享。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.