Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455126
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 16:56:49

        注:本文適合初學者閱讀。
        很多時候,需要將一種數據類型的數據,直接用另一種數據類型表現出來。例如,有一個包含四個字符的字符串“1234“,為了某種需要,要查看在包含這四個字符的內存中,如果是整型該是什麼數據(或許是其它類型)。為了說明方便,先將用戶所需的整型值給列出來為0x34333231(因在內存中將整數的高位放在後面,低位放在前面,所以內存中的0x31323334用十六進制整數值就是0x34333231。這一點是劉雲兄指出後更正的)。其實本題的實質是內存的直接拷貝。
        1.    通常最容易想到的方法就是內存拷貝。如:
        char c[]=”1234”;
  int a=0;
        memcpy(&a,c,4);
        cout<
        2.    我們還常會想到強制轉換,我們可以做一下實驗:
        char c[]=”1234”;
  int a=0;
        a=(int)c;
        cout<        上機運行,發現結果並非所需的數據,仔細查看一下就容易找出得到的a的數值就是變量c的地址了。可見這種轉換方法行不通。

        3.    直接強制轉換不行,我們可以利用指針的強大功能,將其直接轉換成所需要的類型。如下:
        char c[]=”1234”;
  int a=*(int *)c;
        cout<        由此可見,與前兩種方法相比有明顯的優點。

        4. 利用引用
        引用是C++用途很廣的方法,本例中如果使用引用,也會產生意想不到的效果,如下:
        char c[]=“1234”;
        int a=(int &)c;
        cout<  初看到這種使用方法,讀者可能感到驚呀,怎麼這樣也行啊?如果讀者對此不理解,請繼續看分析。
        在此例中,c[]是字符數組,單個c就是字符數組的地址。在我們定義引用時就是通過初使化賦地址值來使用的,如:
  int b=0x34333231;
       int &c=b;
       cout<       這時候c和b雖然不是一個變量,但其地址是同一個,就像一個人兩個名字,上句輸出的結果是0x34333231;而不是c在內存中的地址。
  再看方法4,將其改為如下方式。
        char c[]=“1234”;
        int &b=(int &)c;
        int a=b;
        cout<        方法4中直接用int a=(int &)c;相當於創建了一個臨時的引用,接著又將引用的值傳給了a,所以此方法能順利的運行。

        本文以整型和字符串型做為事例,所述方法可用於多種類型的處理,希望讀者在編程中有所啟發。
        由於本人水平有限,文中難免有誤,請讀者批評指正。

        本文因有誤,已於2006.3.9做更正。
发表于 2006-03-08 14:38 水石 阅读(743)   

--------------------next---------------------

阅读(316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~