關於強制型別轉換

2021-08-28 06:21:52 字數 836 閱讀 6639

思考

#includeint main()

; int *ptr1=(int *)(&a+1);

int *ptr2=(int *)((int)a+1);

printf("%x, %x\n", ptr1[-1], *ptr2);

return 0;

}

輸出:4,2000000

我們先看第乙個我們知道ptr1[n] = *(ptr1 + n)所以ptr1[-1]實際上就說ptr所指的前乙個元素,除此之外我們還要注意int *ptr1=(int *)(&a+1);中的&a是取a的引用,他的值和a相同(本人親測),但是引用相當於取整體,所以+1相當於+4,所以指標ptr所指的前乙個元素為4.

第二個

將a轉為int型別(同char *)注:除了指標型別只能用轉int,因為指標固定的,必須轉int(4位元組),強制型別轉換不能對記憶體位址操作,所以只可以用int,這樣表示讓位址按整形去計算。

聯想

#includeint main()

; int *ptr1=(int *)(&a+1);

int *ptr2=(int *)((int)a+1);

printf("%x, %x\n", ptr1[-1], *ptr2);

return 0;

}

大家能想到這樣結果是多少麼

關於強制型別轉換

var dump 0 null false var dump 0 0 true var dump 0 false var dump 0 false true var dump 0 null true var dump 0 0 true var dump 0 true var dump 0 false...

強制型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...

強制型別轉換

顯式轉換也稱為強制型別轉換 cast 包括以下列名字命名的強制型別轉換操作符 static cast dynamic cast const cast 和 reinterpret cast。命名的強制型別轉換符號的一般形式如下 cast name expression 其中 cast name 為 s...