//указатель на массив char
typedef char* PARChar;
//Массив из из семи указателей на целые
typedef int* P7Aint[7];
//Указатель на массив из 7 указателей на целые
typedef int* P7PAint[7];
//То же самое, что и предыдущее ибо
int a=3;
P7Aint p7;
p7[0]=&a;
int** pp7=p7;//Указатель на массив из 7ми указателей
//Массив из 8ми массивов по 7ми указателей на целые чила
typedef int *P78int[8][7];
Все верно?
И еще 1 вопрос. Можно ли инициализировать тип typedef int* PT[] не списком не инициализации?
Пример:
int* pc[6];
pc[0]=new int[20];
pc[0][1]=5;
//Можно ли также инициализировать и с typedef?
typedef int* PT[];
int b=5;
PT pt1={&b,&b,&b};//Ok
PT pt2[4];//Error
Спасибо.
Здравствуйте, rp80, Вы писали:
R>R>//Массив из из семи указателей на целые
R>typedef int* P7Aint[7];
R>//Указатель на массив из 7 указателей на целые
R>typedef int* P7PAint[7];
R>//То же самое, что и предыдущее ибо
R>
R>Все верно?
Нет, не верно. Нужно четко различать три разных типа: 1) массив; 2) указатель на массив; 3) указатель на элемент массива, который получается при приведении массива к указателю:
int* array[7]; //Массив из из семи указателей на целые
int* (*ponter_to_array)[7] = &array; //Указатель на массив из из семи указателей на целые
int** pointer_to_element = array; //Указатель на элемент массива
Надо заметить, что адреса, хранящиеся в указателе на массив и указателе на элемент массива, могут быть одинаковыми (но не обязаны). Но как бы то ни было, никогда не нужно забывать, что это разные типы.
Здравствуйте, rg45, Вы писали:
R>Нет, не верно. Нужно четко различать три разных типа: 1) массив; 2) указатель на массив; 3) указатель на элемент массива, который получается при приведении массива к указателю:
R>R>int* array[7]; //Массив из из семи указателей на целые
R>int* (*ponter_to_array)[7] = &array; //Указатель на массив из из семи указателей на целые
R>int** pointer_to_element = array; //Указатель на элемент массива
R>
R>Надо заметить, что адреса, хранящиеся в указателе на массив и указателе на элемент массива, могут быть одинаковыми (но не обязаны). Но как бы то ни было, никогда не нужно забывать, что это разные типы.
Спасибо. Вроде понятно. А насчет второго вопроса? Невозможно из-за несоответсвия типов?
Здравствуйте, rp80, Вы писали:
R>И еще 1 вопрос. Можно ли инициализировать тип typedef int* PT[] не списком не инициализации?
R>Пример:
R>R> int* pc[6];
R> pc[0]=new int[20];
R> pc[0][1]=5;
R>//Можно ли также инициализировать и с typedef?
R>typedef int* PT[];
R>int b=5;
R>PT pt1={&b,&b,&b};//Ok
R>PT pt2[4];//Error
R>
Здесь было бы все правильно, если бы при определении типа
PT ты задал какое-то значение размера массива. Ошибка как раз и возникает из-за того, что элемент массива
pt2 не имеет определенного размера.