2013-04-17 217 views
1

目前我有一个数组定义为'float myIDs'的几个类。我想将变量移到我的父类中,并将其更改为一个指针('float * myIDs')。C++指针数组声明

目前我声明了它的价值是这样的:

float myIDs[] = { 
    //Variables 
}; 

正如它现在是一个指针,我认为这将是大致相同的:

myIDs = new float[] = { 
}; 

但是,这并不似乎是加工。我不知道如何解决这个问题,因为我以前从来没有必要声明过像这样的指针数组。

任何人都可以帮助我吗?

感谢

+0

“现在它是一个指针” - 不,它不是,它是一个数组。如果你想要一个动态数组,为什么不使用'std :: vector '? –

+0

这个问题有很多困惑,因为你已经问过'指针数组',并且很难判断你是否要求一个指向数组的指针(可以从文本中扣除)或者指针数组来自标题)。 BTW。通过编写'myIDs = ** new float [] = {}; **你正试图给新的float []返回一个新的值。 – Tomasz

+0

对不起,我的意思是指向一个数组的指针,而不是指针数组。 – Split

回答

-4

如果你想指针数组浮动,你必须这样声明。你只声明一个浮点数组。该数组的名称当然是一个指针,但在C sytnax中,它的处理方式相同,只是一种便利。

float *myIDs[] = { 
    //Variables 
}; 

myIDs = new *float[n] = { 
}; 

或者您可以使用

float **myIDs; 
myIDs = new **float; 

并获得同样的方式类似的数组:

浮子* X = myIDs [I];

+1

我不认为'new * float [n]'和'new ** float'做同样的事情,即使对'n == 1'也不行。另外,我怀疑C++语言有'new * float [n] = {}'之类的东西。 –

+2

你写的是** **,在你的第一个例子中它应该是'new float * [n]'并且不能初始化为零以外的任何东西。在你的第二个例子中,'new float **'会返回一个'float ***'并且只分配** 1 **'float **'的内存。 – zakinster

+0

ew * float [n] = {} does not work我很害怕:'( – Split

0

如果你想有一个动态分配的数组,你应该使用以下格式(你做了什么,似乎更像是C#不是C++)

//The declaration of the object in the class 
float *myIDs; 

//The allocation it self (you must know which size you want to allocate at this point) 
myIDs = new float[size];//bring change "size" to whatever you need is. 
8

请注意,你不分配指针,但只是一个float数组的数组,所以基本上你们两个阵列将具有相同类型的,他们只是将不被存储在相同的内存空间。

只有静态分配的数组可以这种方式初始化,动态分配的数组不能初始化为零以外的任何值。

myIDs = new float[](); 

但如果你知道的元素把数组中,你并不需要动态地分配它。

如果你想分配一个数组指针,你必须这样做:

float* myIDs[size]; // statically 
float** myIDs = new float*[size]; // dynamically 

但只有静态分配的一个(第一个)可以被您所描述的方式和初始化过程的它必须用指针初始化。

0

考虑下面的代码片段,

#include<iostream> 
#include<stdlib.h> 
int main(void) 
{ 
int a[] = {1,2}; 

a =new int[2]; 
delete(a); 

return 0; 
} 

这给出了一个错误error: incompatible types in assignment of ‘int*’ to ‘int [2]’。 我静态地创建一个int数组。 a是一个指针(它是int类型的[2]),但它不能被使用,因为它们返回int*类型的指针指向其它动态分配的阵列。

如果你想创建一个动态数组你有它的地址分配给float*

float * a = new float[10] ; 

参考this了。

3

如果你想在一个动态的方式来声明数组,你可以做这样的:

float *array = new float[size]; 
array[0] = first_value; 
array[1] = second_value; 
etc; 

只记得释放内存当你不再需要它(例如,在类的析构)

delete [] array;