Определение типа через typedef

ForEveR

То-ли я пересидел, то-ли я просто этого не знаю, но все же. Через typedef определить 1) массив из 7 указателей на целые числа. Как не через тайпдеф знаю - int*arr[7]; А вот как через него - хз... 2) указатель на массив из 7 указателей на целые числа. Полагаю что не через тайпдеф это будет как-то так: int**arr[7]; 3) массив из 8 массивов по 7 указателей на целые. Ступор. На ум приходит только int*arr[?][8][7] но что-то мне это крайне сомнительно.
4 ответа

ForEveR

То-ли я пересидел, то-ли я просто этого не знаю, но все же. Через typedef определить 1) массив из 7 указателей на целые числа. Как не через тайпдеф знаю - int*arr[7]; А вот как через него - хз... 2) указатель на массив из 7 указателей на целые числа. Полагаю что не через тайпдеф это будет как-то так: int**arr[7]; 3) массив из 8 массивов по 7 указателей на целые. Ступор. На ум приходит только int*arr[?][8][7] но что-то мне это крайне сомнительно.
Вот определения с примерами:
#include <iostream>
#include <cstdlib>
 
/* Константы использовал для удобства */
const size_t size1 = 7;
const size_t size2 = 8;
 
/* 1 */
typedef int * tArr1[size1];
 
/* 2 */
typedef int * (* tArr2)[size1];
 
/* 3 - Массив из 8 массивов... размер не указан, значит будет просто указателем */
typedef int * (* tArr3)[size2][size1];
 
int main()
{
    /* 1 */
    std::cout << "\t " << 1 << std::endl;
    tArr1 arr1;
    for(size_t i = 0; i < size1; ++i)
    {
        arr1[i] = new int (i);
        std::cout << *arr1[i] << std::endl;
    }
 
    /* 2 */
    std::cout << "\t" << 2 << std::endl;
    tArr2 arr2 = &arr1;
    for(size_t i = 0; i < size1; ++i)
        std::cout << *(*arr2)[i] << std::endl;
 
    /* Третий пример инициализировать как-то лень было ;)
     * думаю, сам принцип понятен
     */
    return EXIT_SUCCESS;
}
Вот эта тема тоже может быть полезна


ForEveR

typedef int *Base[7];
typedef Base *BasePtr;
typedef Base BaseArr[8];
 
...
 
    Base a;
    BasePtr b;
    BaseArr c;


ForEveR

Nameless One, Спасибо. Так и думал, что каким-то таким макаром. Спасибо


ForEveR

1) массив из 7 указателей на целые числа. Как не через тайпдеф знаю - int*arr[7]; А вот как через него - хз... 2) указатель на массив из 7 указателей на целые числа. Полагаю что не через тайпдеф это будет как-то так: int**arr[7]; 3) массив из 8 массивов по 7 указателей на целые. Ступор. На ум приходит только int*arr[?][8][7] но что-то мне это крайне сомнительно.
Можно из простых состовлять сложные: 1)
typedef int *pint; // Указатель на целые числа
typedef pint p7int[7];  // Семь указателей на целые числа