Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
а зачем модификатор const для массива?
int m1[5];
int *m2;
&m1 == &m2;
Для: Blackheart1983
Эквивалентность этих объявлений зависит от компилятора. Например VS не переваривает следующий код:Я не придираюсь, просто забавный фактКод:int m1[5]; int *m2; &m1 == &m2;
Я пытаюсь сравнить "указатель на указатель на целое" с "указателем на массив целых длиной 5", по крайней мере так это воспринимает майкрософтовский компилятор. Для него int*, int[], int[5] и int[6] - разные типы, mas1( int* ) и mas1( int[] ) - разные объявления. Что как-то расходится с распространенным мнением что массив - это просто константный указатель.
З.Ы. Что интереснее: флудить на отвлеченные темы или решать элементарные задачи за других?
странно что при int m1[5], *m2;
&m1==&m2 вызывает ошибку, тогда как m1==m2 компилируется.
нажимаю на кнопку "ответить" или "новая тема" пишет нету правУ вас нет прав публиковать ответ в эту тему
int i = 5;
long l = i;
cout << i << endl << l << endl;
template<typename T> void f(T t) {}
...
void test(int m3[])
{
int m1[5];
int *m2 = m1;
f(&m1);
f(&m2);
f(&m3);
}
Можно загадки на собеседовании задавать. Типа, сколько тут будет сгенерено реализаций функции f:
Код:template<typename T> void f(T t) {} ... void test(int m3[]) { int m1[5]; int *m2 = m1; f(&m1); f(&m2); f(&m3); }
На самом деле - массив, объявленый локально, - это переменная типа тип-элементов[длина], с implicit преобразованием в указатель на тип-элементов. Отличие от константного указателя хотя в бы в том, что массив - не l-value.[/code] А массив, объявленый с использованием того же синтаксиса, но как параметр функции - это просто указатель.
Ок давайте рассмотрим примерНа самом деле - массив, объявленый локально, - это переменная типа тип-элементов[длина], с implicit преобразованием в указатель на тип-элементов. Отличие от константного указателя хотя в бы в том, что массив - не l-value.[/code] А массив, объявленый с использованием того же синтаксиса, но как параметр функции - это просто указатель.
Ссылка не работаетСобственно мне и было интересно, что есть массивы с точки зрения стандарта С++.
Текст стандарта:Ссылка скрыта от гостей
int m[5];
const int* p = m;
std::cout << ((void*)&m == (void*)m) << std::endl; // 1
std::cout << ((void*)&p == (void*)p) << std::endl; // 0
Обучение наступательной кибербезопасности в игровой форме. Начать игру!