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