2013-04-17 214 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;