浮点数浮动*

时间:2014-10-08 17:20:27

标签: ios c arrays pointers

float[]float*之间的区别是什么?

另外,如何将float数组转换为float *?我需要获得一个float *并打开它,然后应用过滤器并将其作为float *发送到我的FFT方法中,但我不知道该怎么做,因为我没有&#39知道它们之间的真正区别。

4 个答案:

答案 0 :(得分:2)

数组通常是指向列表第一个成员的指针。使用Array [Identifier]时,您正在访问*(p + Identifier)。

制作一个新数组会将一系列指针定义在另一个指针旁边,这样可以更方便地使用它。

答案 1 :(得分:2)

您可以通过以下方式设置float数组:

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

答案 2 :(得分: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。有一个可变指针,你可以用它指向任何东西。

答案 3 :(得分: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];