PDA

查看完整版本 : 浮點數指標?


哈啦
2014-06-20, 03:44 PM
有一習題程如下:
#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產生的指標型態卻是浮點數的二維陣列,因此必須強制轉型。

這段話不知是翻譯的問題還是怎樣,我是有看沒有懂:shorto,但大致知道說它要把 x 陣列指給p時,要來這麼一個 p=(float *)x。

我的疑問是,x[3][3]本來不就已宣告是float了嗎?而*p也是宣告為float,二者型態相符何必再來轉一次?
而且我跑程式發現,無論是p=(float *)x或者照我直覺的p=x,跑出來的答案都是一樣而且正確的?

而如果這個得強制轉型,那其他int , double等等也要強制轉型嗎?一維陣列呢?還是二維陣列以上才如此?

還請先進指教一下?

thanks:bow

yumi
2014-06-20, 05:37 PM
c语言,写不写“(float *)”,都可以的
c++语言,不写“(float *)”,是不可以的

哈啦
2014-06-20, 05:41 PM
c语言,写不写“(float *)”,都可以的
c++语言,不写“(float *)”,是不可以的

那請問一下為何這二個都已宣告是 float了,還要再f=(float*)x一次呢?
那如果是 int ,double 呢?

還有,這個 (float *)是什麼意思,我還一直沒有搞懂?:XD:

thanks

yumi
2014-06-20, 06:44 PM
若是一维阵列,阵列名是指向第0个单元的,不存在上面的问题,不论有无“(float *)”均可。
若是二维阵列,阵列名是指向第0行的,不是指向第0个单元的;必须使用“(float*)”使之指向第0个元素才可以操作。

哈啦
2014-06-20, 06:55 PM
若是二维阵列,阵列名是指向第0行的,不是指向第0个单元的 這句話我聽懂了。~yes

必须使用“(float*)”使之指向第0个元素才可以操作。 這句話還是不懂,為何float* 和 使之指向第0个元素 有關呢?~what

而這個float是指第0個元素是float嗎?不是一開始就已設定這整個陣列是float了?