<!--QuoteBegin-Blackheart1983+15:11:2007, 17:36 -->
<span class="vbquote">(Blackheart1983 @ 15:11:2007, 17:36 )</span><!--QuoteEBegin-->void test(int*a)
{
std::cout<<a;//работает чудно не матерится
std::cout<<a[5];//работает тоже чудно и тоже не матерится. но!!!! Access Violation в случае целого обеспеченно
//и в случае когда выход за предел массива
}
[snapback]85927" rel="nofollow" target="_blank[/snapback]
[/quote]Как параметр передается указатель, и работаешь ты с ним как с указателем. Все корректно, потому и компилируется.
<!--QuoteBegin-Blackheart1983+15:11:2007, 17:36 -->
<span class="vbquote">(Blackheart1983 @ 15:11:2007, 17:36 )</span><!--QuoteEBegin-->При компиляции компиль не производит проверку на передачу массива это факт
почему же не передать &g2?
[snapback]85927" rel="nofollow" target="_blank[/snapback]
[/quote]Потому что g2 из int[6] неявно преобразуется в int* при вызове test. Ссылку или указатель на массив в функцию вообще передать нельзя, это спецально оговорено в стандарте, в разделе functions. И проверяется компилятором. Поэтому &g2 передать не получится. В этом и есть фишка массивов. Синтаксически, массив - отдельная переменная. Но при компиляции она везде явно подставляется в виде своего значения. Да еще и опреатор & для массива работает непредсказуемо, т.к. после компиляции переменной как таковой нет:
Код:
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
Массив - не l-value, к нему вообще нельзя применять &, но та же VS этот код почему-то проглатывает.
<!--QuoteBegin-Blackheart1983+15:11:2007, 17:36 -->
<span class="vbquote">(Blackheart1983 @ 15:11:2007, 17:36 )</span><!--QuoteEBegin-->разве может константный указатель выступать в виде L-value раз ве что во время инициализации
[snapback]85927" rel="nofollow" target="_blank[/snapback]
[/quote]Константный указатель - это unmodifiable l-value.
Для:
Blackheart1983
h_ttp://plumber.gnu-darwin.org/home/pub/isoiec14882-c++-standard.pdf
Огромный и бесполезный документ для всех, кроме авторов компиляторов
