2013-04-17 3 views
1

В настоящее время у меня есть несколько классов с массивом, определенным как «float myIDs». Я хочу переместить переменную в родительский класс и изменить ее на указатель ('float * myIDs').Объявление массива указателей на C++

В настоящее время я объявляю его значения, как это:

float myIDs[] = { 
    //Variables 
}; 

Как его теперь указатель, я думал, что это будет примерно то же самое:

myIDs = new float[] = { 
}; 

но то не кажется, за работой. Я не уверен, как это решить, поскольку мне никогда не приходилось объявлять такой массив указателей, как раньше.

Может ли кто-нибудь мне помочь?

Благодаря

+0

«Как его теперь указатель» - нет, это не так, это массив. И почему бы не использовать 'std :: vector ', если вы хотите динамический массив? –

+0

Существует много путаницы с этими вопросами, поскольку вы попросили «массив указателей», и трудно сказать, запрашиваете ли вы указатель на массив (который можно вычесть из текста) или массив указателей (из названия). КСТАТИ. путем написания 'myIDs = ** new float [] = {}; ** вы пытаетесь присвоить новое значение любому новому возврату float []. – Tomasz

+0

Извините за путаницу, я имел в виду, что это указатель на массив, а не массив указателей. – Split

ответ

-4

Если вы хотите массив указателей плавать, вы должны объявить это как таковое. Вы объявили массив массивов поплавков. Конечно, имя массива является указателем, но в C sytnax его обрабатывают одинаково и просто удобнее.

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

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

В качестве альтернативы вы можете использовать

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

и обращаться к ней таким же образом, как массив:

поплавок * х = myIDs [I];

+1

Я не думаю, что 'new * float [n]' и 'new ** float' делают то же самое, даже для' n == 1'. Кроме того, я сомневаюсь, что язык C++ имеет нечто вроде 'new * float [n] = {}'. –

+2

Что вы написали ** неправильно **, в вашем первом примере это должно быть 'new float * [n]' и не может быть инициализировано ничем иным, кроме нуля. Во втором примере 'new float **' будет возвращать 'float ***' и выделять только память ** one **' 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; 
Смежные вопросы