2014-10-08 84 views
-3

float[]float*有什麼區別?浮法陣列浮動*

另外,我怎樣才能將一個浮點數組轉換爲float *?我需要得到一個float *並打開它,然後應用一個過濾器並將其作爲float *發送到我的FFT方法中,但我不知道該怎麼做,因爲我不知道它們之間的真正區別。

+1

http://c-faq.com/aryptr/ – 2014-10-08 17:21:50

+2

完全一樣C.瞭解C. – 2014-10-08 17:25:28

+0

感謝您的諮詢。 – smoothumut 2014-10-09 13:13:23

回答

1

這些點都涉及到C:

  • 一個數組的名字可以分解 - 即隱式轉換 - 到指向其第一個元素的指針;
  • 在一個數組中,元素是連續存儲的;
  • 語法a[8]只是*(a + 8)的簡寫;和
  • n加到指針p,定義爲加上n * sizeof(*p)

因此,數組與指針的區別在於語義上不同。但是您可以在任何需要指針的地方提供數組的名稱,因爲它將被轉換。

另外,您還可以使用下標語法向任何指針添加偏移量。

Objective-C是C的一個嚴格超集。所以這些規則也適用於Objective-C中基元類型的使用。


要理解這種區別,請考慮可變性。以下內容無效:

char array[]; 
char value; 

array = &value; 

您不能重新分配array。它是一個數組的名稱。 array本身在運行時不可變,只有其中的東西是可變的。相反以下是有效的:

char *pointer; 
char value; 

pointer = &value; 

您可以經常爲你喜歡重新分配pointer。有一個可變指針,你可以用它指向任何東西。

+0

感謝您的幫助和很好的解釋。這真的有助於理解這一點 – smoothumut 2014-10-09 11:52:26

+0

你能幫助我對我的新challange請深深感激 – smoothumut 2014-10-09 12:38:11

2

數組通常是指向列表的第一個成員的指針。當使用數組[標識符]時,您正在訪問*(p +標識符)。

製作一個新的數組將會定義一系列指針緊挨着另一個,這將使它的使用更容易。

2

您可以在以下方面的int數組:

float array1[100] = { 0 }; 
float *dataArray = (float*)malloc(sizeof(float) * 100); 
float *pointerToFloatArray = array1; 
+0

這真的幫了我很多。非常感謝 – smoothumut 2014-10-09 12:18:09

1

您可以使用C風格的數組,就像這個答案說明:https://stackoverflow.com/a/26263070/3399208

,但更好的辦法 - 使用Objective-C的容器和Objective-C的對象,比如NSNumber的*:

NSArray *array = [@1, @2, @3]; 

NSMutableArray *array = [NSMutableArray array]; 
NSNumber *number1 = [NSNumber numberWithFloat:20.f]; 
NSNumber *number2 = @(20.f); 
[array addObject:number1]; 
[array addObject:number2]; 
+0

這不是我正在尋找,但非常感謝 – smoothumut 2014-10-09 11:06:16