int * var[10] и int (*var)[10];
code - для второго, ты вроде все правильно сказал.
для первого работает потому что эквивалентно
int **var;
для первого работает потому что эквивалентно
int **var;
вообще, указатель на массив можно сделать так :
и выделить для него памяти сколько нужно, а потом обращаться c ним как с обычным массивом.
int *a;
и выделить для него памяти сколько нужно, а потом обращаться c ним как с обычным массивом.
ты хочешь сказать, что int *a - это указатель на массив?
А может это указатель на целое.
А может это указатель на целое.
int c;
int *a=&c;
нет, это указатель на массив. выделяешь память и вперед.
блин, я в терминологии не силен, но это что-то типа "типизированного указателя", а на что он указывает - это тебе решать.
блин, я в терминологии не силен, но это что-то типа "типизированного указателя", а на что он указывает - это тебе решать.
Указатель есть указатель.
Массивы в "Си" суть указатели, на самом деле.
В "Си" массивов именно как сборок просто нет.
---
"А я обучался азбуке с вывесок,
листая страницы железа и жести."
Массивы в "Си" суть указатели, на самом деле.
В "Си" массивов именно как сборок просто нет.
---
"А я обучался азбуке с вывесок,
листая страницы железа и жести."
Первое --- массив из 10 указателей, на него выделена памяти 10*(sizeof *
второе --- указатель на указатели, на него выделена памяти (sizeof *).
---
"А я обучлся азбуке с вывесок,
листая страницы железа и жести."
второе --- указатель на указатели, на него выделена памяти (sizeof *).
---
"А я обучлся азбуке с вывесок,
листая страницы железа и жести."
Хорошо
указатель на начало массива(массив)
указатель на память, где храниться адрес начала массива(указатель на массив)
int *a;
указатель на начало массива(массив)
int * var[10]
указатель на память, где храниться адрес начала массива(указатель на массив)
to ? т.е. ты думаешь, что этот code для второго?
если да, то ты не правильно понял- это code для первого var-а...
если да, то ты не правильно понял- это code для первого var-а...
Любое объявление "type name[len]" есть, на самом деле, "type*name".
Отличие состоит только в начальном значении и выделении памяти.
Для уяснения тонкостей советую познакомиться с "Алголом-68".
---
"А я обучался азбуке с вывесок,
листая страницы железа и жести."
Отличие состоит только в начальном значении и выделении памяти.
Для уяснения тонкостей советую познакомиться с "Алголом-68".
---
"А я обучался азбуке с вывесок,
листая страницы железа и жести."
по сути своей оба объявления эквивалентны
int **var;
если у тебя нечто
то проблем не будет, а если нет, то результат операции не предсказуем(завист от начального значения var)
int **var;
если у тебя нечто
var=(int **)malloc(sizeof(int*)*k);
то проблем не будет, а если нет, то результат операции не предсказуем(завист от начального значения var)
Они не эквивалентны.
int* arr[10]; - массив указателей на int. Сами int могут быть, где угодно.
int (*arr)[10] - указатель на массив из 10 int. Все Int собраны в одном месте.
И грамотный компилятор должен различать, такие типы и предупреждать о неправильном использовании.
int* arr[10]; - массив указателей на int. Сами int могут быть, где угодно.
int (*arr)[10] - указатель на массив из 10 int. Все Int собраны в одном месте.
И грамотный компилятор должен различать, такие типы и предупреждать о неправильном использовании.
но как нужно инициализировать "int **var", чтобы получить указатедь на массив или массив указателей?
1)
2)?
1)
var = new int*[10]; var[i] = new int;
2)?
*var = new int[10];
Оставить комментарий
marizha
который из этих двух является указателем на массив, а который - массивом указателей?по-моему, судя по приоритетам, первый var является указатлем на массив, но тогда возникает еще один вопрос по поводу инициализации этого var-а:
почему это правильно:
т.е. получается, что var является массивом указателей а не указателем на массив?