|
|
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Не могу разобраться с указателем на массив. Как правильно его объявить, инициализировать и использовать? Вот это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 09:49:58 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
int *nums; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 10:09:59 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
А если всетаки Код: plaintext 1. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:01:42 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
new возвращает int*, а не int[]. Зачем тебе это надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:03:13 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Как бы вопрос не на пустом месте вохник: MSDN - C Language Reference - Pointer Declarations int *pointers[10]; /* Declares an array of pointers */ int (*pointer)[10]; /* Declares a pointer to an array of 10 elements */ Или это все Microsoft Specific? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:12:07 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Max_Хацкерint (*nums)[10]; где ты тут видишь указатель на массив? пробуй тогда так авторint *nums = new int[10] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:19:19 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Murash Max_Хацкерint (*nums)[10]; где ты тут видишь указатель на массив? пробуй тогда так авторint *nums = new int[10] Согласно гуру MSDN (циата оттуда). А предложеный вариант это тоже самое, что и Код: plaintext 1. 2. Не сомневаюсь, что это работает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:30:31 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1. new int[10] возвращает тип int*, поэтому надо явно привести к типу массива (можно и в стиле С) 2. *(nums + i) не тоже самое, что *nums [i] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:38:22 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
гад, сожрал скобки ))) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 11:40:13 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
egorych Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1. new int[10] возвращает тип int*, поэтому надо явно привести к типу массива (можно и в стиле С) 2. *(nums + i) не тоже самое, что *nums [i] Микрософт обломался : Error 1 error C2440: 'initializing' : cannot convert from 'int (*)[]' to 'int (*)[10]' Или где-то очепятка. :) P.S. Сам пользуюсь DevC++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:06:01 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Проверил в VS2005. Это так, к слову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:07:49 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
egorychгад, сожрал скобки ))) Код: plaintext Это я в курсе. Просто один из вариантов заняться адресной арифметикой :). В простых случаях, типа моего примера, может и можно так сделать. Но лучше пущай компилер над этим заморачивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 12:11:02 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Max_Хацкер Микрософт обломался : Error 1 error C2440: 'initializing' : cannot convert from 'int (*)[]' to 'int (*)[10]' Или где-то очепятка. :) P.S. Сам пользуюсь DevC++. Попробуй вставить [10] в реинтерпрет каст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:49:56 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Попробовал. Таже фигня. Нарыл хорошую книгу: Стивен Прата. Язык программирования С++ с нормальным, внятным описанием работы с динамическими массивами и указателями на них. Всем большое спасибо за участие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 14:14:59 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
Max_Хацкер ... Или где-то очепятка. :) Copy/Paste опечаток не оставляет, в чём его и прелесть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 15:18:18 |
|
||
|
Указатель на массив. ОБъявление, инициализация, использование.
|
|||
|---|---|---|---|
|
#18+
классический пример из хелповника по оператору new char *str; int i,j,n,m,**data; n = 5; m = 6; try { // TEST FOR EXCEPTIONS. str = new char[100]; data = new int*[m]; // STEP 1: SET UP THE ROWS. for (int j = 0; j < m; j++) data[j] = new int[n]; // STEP 2: SET UP THE COLUMNS } catch (...) { // ENTER THIS BLOCK ONLY IF bad_alloc IS THROWN. // YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING //cout << "Could not allocate. Bye ..."; //исключительная операция при выделении памяти пиши что хочешь //обработай сам return; } for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) data [j] = i + j; // ARBITRARY INITIALIZATION for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { sprintf( str, "i = %d j = %d data[%d][%d] = %d", i, j, i, j, data[j]); ListBox1->Items->Add( str); //я пишу в билдере ListBox1->Items->Add( str); замени на свой вывод на экран } //освобождение памяти for (int i = 0; i < m; i++) delete[] data; // STEP 1: DELETE THE COLUMNS delete[] data; // STEP 2: DELETE THE ROWS delete[] str; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 10:53:21 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=271&tid=2027941]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 388ms |

| 0 / 0 |
