有一習題程如下:
#include <stdio.h>
int main(void)
{
float x[3][3]={1.1,2.2,3.3,
4.4,5.5,6.6,7.7,8.8,9.9};
float *p;
p=(float *)x;
printf("%f",*(p+(3*1)+1));
return 0;
}
有一個浮點數二維陣列 x[3][3],要求出第二列第二個元素的值 x[1][1]。
書上說,
引用:
將x強制轉型成(float *)是必須的,因為這個指標的運算是相對於浮點數指標而言。然而,由x產生的指標型態卻是浮點數的二維陣列,因此必須強制轉型。
|
這段話不知是翻譯的問題還是怎樣,我是有看沒有懂
,但大致知道說它要把 x 陣列指給p時,要來這麼一個 p=(float *)x。
我的疑問是,x[3][3]本來不就已宣告是float了嗎?而*p也是宣告為float,二者型態相符何必再來轉一次?
而且我跑程式發現,無論是p=(float *)x或者照我直覺的p=x,跑出來的答案都是一樣而且正確的?
而如果這個得強制轉型,那其他int , double等等也要強制轉型嗎?一維陣列呢?還是二維陣列以上才如此?
還請先進指教一下?
thanks