簡體   English   中英

無法理解輸出

[英]Can't understand the output

代碼看起來像這樣。

#include<stdio.h>

int main(){
    int vals[2];
    char *x;
    int *v, *v2, *v3;
    vals[0] = 0x00ABCDEF;
    vals[1] = 0x12345678;

    x = (char *) &vals[0];
    v = (int *) (x + 1);
    v2 = (int *) (x+2);
    v3 = (int *) (x+3);

    printf ("%x \n", *x); /*0x EF */
    printf ("%x \n", *v); /*0x 7800ABCD */
    printf ("%x \n", *v2); /*0x 567800AB */
    printf ("%x \n", *v3); /*0x 34567800 */
}

注釋中的值是輸出。 您能否解釋x如何指向EF以及v,v2和v3。 這是什么解釋。 我知道一個十六進制數字是四個位,一個int可以存儲8個十六進制數字,但無法理解x如何指向EF而不是00,它們是前兩個字母,以及為什么后兩個字母而不是前兩個字母。

如果您的系統有對齊要求,則v = (int *) (x + 1); (以及接下來的兩行)由於對齊沖突而導致未定義的行為。

但是即使不這樣做, *v稍后也會通過違反嚴格的別名規則而導致未定義的行為。 表達式*v類型為int ,不允許使用這種類型的表達式來訪問char對象(或者實際上是除intunsigned int或const限定版本之外的任何對象)。

未定義的行為意味着任何事情都可能發生,包括無意義的輸出或其他。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM