陣列和指標的型別轉換

2021-06-18 22:40:42 字數 854 閱讀 7382

每次遇到這一塊都容易糊塗。於是再澄清一下:

int **m;//m是二級指標

int (*n)[5];//n是陣列指標,是指向int [5]的指標,和函式指標寫法類似

int *o[3];//o是包含3個int指標的陣列

int *p[5];//p是包含5個int指標的陣列

int q[3][5];//3行5列的二維陣列

指標的賦值操作

m=n;//錯誤; int **m; int (*n)[5];

m是指向int *的指標,而n是指向int [5]的指標,型別不同,n是20個位元組的型別,而m是4個位元組的。

在vc裡面這兩個型別屬於不同的型別。所以不能進行型別轉換,但是在gcc下是可以進行轉換的,但是會

給出警告。這樣轉化是不安全的。測試了一下,發現m+1前進了4個位元組,而n+1則前進了20個位元組,所以

如果轉換了之後就可能導致莫名奇妙的錯誤。當然也不是不可能轉化的,在vc下你可以這樣子轉化。

m=reinterpret_cast(n);

使用其他的轉化方式都不能完成轉化。

m=o;//正確; int **m; int *o[3]; m+1前進4位元組,o+1前進4位元組,可相互轉化

m=p;//正確; int **m; int *p[5]; m+1前進4位元組,o+1前進4位元組,可相互轉化

n=q;//正確; q[3][5] q+1前進20個位元組,故和n一致

m=q;//錯誤; m+1前進4位元組,q+1前進20個位元組

下面來自我qq空間的以前的帖子,是有關這個問題的例項,讀者有興趣可以分析一下

有關陣列和指標的可參見

《c專家程式設計》裡面講得很詳細 0

給主人留下些什麼吧!~~

關於指標型別和指標型別轉換的理解

前幾天在判斷 值相同的兩個指標所指向的變數的值可以不同 一些用到的 開始之前,先來複習一些會用到的知識。1.位址,位元組,位 位 bit 是電子計算機中最小的資料單位。每一位的狀態只能是0或1。位元組 byte 是用於計量儲存容量的一種單位,每乙個位元組由8位組成 1byte 8bit 位址可以理解...

關於指標型別和指標型別轉換的理解

前幾天在判斷 值相同的兩個指標所指向的變數的值可以不同 一些用到的 開始之前,先來複習一些會用到的知識。1.位址,位元組,位 位 bit 是電子計算機中最小的資料單位。每一位的狀態只能是0或1。位元組 byte 是用於計量儲存容量的一種單位,每乙個位元組由8位組成 1byte 8bit 位址可以理解...

指標型別的向下轉換和向上轉換

這裡稍微解釋下何謂指標型別的向下轉換和向上轉換。向下轉換是指派生類指標轉換為基類指標型別,向上轉換是指基類指標型別轉換為派生類型別。c 一般使用dynamic cast轉換符實現向上轉換。智慧型指標可以毫無問題的進行向下型別轉換,卻不能使用dynamic cast進行向上型別轉換。那麼怎麼實現智慧型...