網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   浮點數指標? (https://www.domainclub.org/showthread.php?t=36758)

哈啦 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

引用:

作者: yumi (文章 192694)
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了?


所有時間均為 +8。現在的時間是 08:27 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.