2014-10-08 74 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