LINUX.ORG.RU

[C++] массивы и указатели

 


0

1
#include <stdlib.h>
#include <stdio.h>

int main () {
        int arr[2][2][2];
   
        arr[0][0][0] = 0; 
        arr[0][0][1] = 1; 
        arr[0][1][0] = 2; 
        arr[0][1][1] = 3; 
        arr[1][0][0] = 4; 
        arr[1][0][1] = 5; 
        arr[1][1][0] = 6; 
        arr[1][1][1] = 7; 

        int i, j, k, count;
        count = 0; 
        int ***array; // Многомерный массив     
        array = (int***)malloc(sizeof(int*) * 2);
        for(i = 0; i < 2;i++){
                *(array + i) = (int**)malloc(sizeof(int*) * 2);
                for(j = 0; j < 2; j++){
                        *(*(array + i) + j) = (int*)malloc(sizeof(int*) * 2);
                        for (k = 0; k < 2; k++){
                                *(*(*(array + i) + j) + k) = count;
                                count++;
                        }  
                }  
        }  

        int ***arrayp = array;
        int (*arrp)[2][2] = arr;
        int ***arrpp = arr; // Ошибка! Почему?

        printf("%d\n", *(*(*(arrayp + 1) + 1) + 1));
        printf("%d\n", arrayp[1][1][1]);

        return 0; 
}

int ***arrpp = arr; // Ошибка! Почему?

Потому что int[2][2][2] и int*** — разные типы.

linuxfan
()

структура размещения в памяти разная поэтому и ошибка.

если грубо представить то

a[][][]=|111|112|113|121|122|123|...

a(int ***) = |111|...что-то...|112|...не пойми что...|

guilder
()

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

loginname
() автор топика
Ответ на: комментарий от loginname

У Подбельского есть, местную студентоту не слушай.

anonymous
()
Ответ на: комментарий от loginname

>Ну, например, у Струструпа я не нашел такого.

Так у него книжка не про Си.

anonymous
()
Ответ на: комментарий от anonymous

>такое, что это - валидный С++-й код

И не только. Это ещё и валидный код для самописного парсера на лиспе. Стоп, получается это и к лиспу имеет отношение?

anonymous
()
Ответ на: комментарий от anonymous

> И не только. Это ещё и валидный код для самописного парсера на лиспе.

а я на С могу написать парсер для SQL, и макросами «эмулировать» некоторое его подмножество - это не превращает С в SQL

Стоп, получается это и к лиспу имеет отношение?


за%бали вы всех со своим лиспом

anonymous
()
Ответ на: комментарий от anonymous

>а я на С могу написать парсер для SQL, и макросами «эмулировать» некоторое его подмножество - это не превращает С в SQL

Именно поэтому сишный код у ТС-а не превращается в с++.

за%бали вы всех со своим лиспом

лисп тут просто так, не нервничай

anonymous
()
Ответ на: комментарий от anonymous

> Именно поэтому сишный код у ТС-а не превращается в с++.

это ты прикинулся шлангом или серьезно тупишь?

anonymous
()
Ответ на: комментарий от anonymous

> Шлангом, шлангом, не волнуйся.

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.