Как инициализировать массив указателей?
От: H.P. Baxxter  
Дата: 24.04.04 11:41
Оценка:
Столкнулся я с этой проблемой и не знаю, что делать, думаю, что это вообще не возможно, кроме того, чтобы задать каждый элемент отдельно.
Со строками у меня всё проходит: char *C[] = {"Hello", "RSDN"};
А с int нет: int *A[] = { {2, 2}, {2, 2} }; — Компилятор находит ошибку! Помогите студенту!
Re: Как инициализировать массив указателей?
От: LaptevVV Россия  
Дата: 24.04.04 11:56
Оценка:
Здравствуйте, H.P. Baxxter, Вы писали:

HPB>Столкнулся я с этой проблемой и не знаю, что делать, думаю, что это вообще не возможно, кроме того, чтобы задать каждый элемент отдельно.

HPB>Со строками у меня всё проходит: char *C[] = {"Hello", "RSDN"};
HPB>А с int нет: int *A[] = { {2, 2}, {2, 2} }; — Компилятор находит ошибку! Помогите студенту!
Во втором случае у тебя в инициализаторах просто массив.
Если тебе нужен массив указателей на int, то это так:
int *A[] = { new int(1), new int(2), new int(3) };   
cout << *A[0] << endl;
int *B[] = {new int[2], new int [2]};
B[0][0]=5;
cout << B[0][0] << endl;

А — массив указателей на int, каждый указатель указывает на одиночный int, его при инициализации можно инициализировать значениями
В — массив указателей на int, каждый указатель указывает на массив int — иниуциализировать значениями не получится, надо потом присваивать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Как инициализировать массив указателей?
От: Othello  
Дата: 24.04.04 11:56
Оценка:
> Столкнулся я с этой проблемой и не знаю, что делать, думаю, что это вообще не возможно, кроме того, чтобы задать каждый элемент отдельно.
> Со строками у меня всё проходит: char *C[] = {"Hello", "RSDN"};
> А с int нет: int *A[] = { {2, 2}, {2, 2} }; — Компилятор находит ошибку! Помогите студенту!
а почему не сделаете так:
int a[2][2] = {{2,2}, {2,2}};
Posted via RSDN NNTP Server 1.8
Re: Как инициализировать массив указателей?
От: Lorenzo_LAMAS  
Дата: 24.04.04 12:00
Оценка:
потому что так нельзя. есть строковый литерал "ABC" и он имеет тип const char[4], массив может преобразоваться в указатель на первый элемента массива и "asdasd" может преобразоваться в char * (да, может именно в char * хотя тип массива и const char[4] — для совместимости с С)и потому возможен первый способ инициализации. Cоставных литералов целого типа в С++ нет. Если тебе нужен двумерный массив целых, то так и пиши int a[][2] = {{0,1}, {2,3}, {4,5}}; и т.д., причем можно опустить лишние скобки внутри. Если же тебе нужен массив именно указателей, то тогда int a[2], a1[3], a2[4]; int * A[] = {a, a1, a2};
Of course, the code must be complete enough to compile and link.
Re[2]: Как инициализировать массив указателей?
От: Аноним  
Дата: 24.04.04 14:28
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>int *B[] = {new int[2], new int [2]};

LVV>В — массив указателей на int, каждый указатель указывает на массив int — иниуциализировать значениями не получится, надо потом присваивать.
А жаль, именно это мне и нужно было. Ну ладно, придёться потом присваивать. В любом случае спасибо всем за инфу — пригодится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.