я написать функцию, как:C программа массива в качестве параметра
void func1(char chx[], int y)
{
int wsn = 0;
wsn = *(int *) (&chx[2]);
if (wsn == 0) {
...
}
}
компилятор работает хорошо, без предупреждения, без ошибок. Но когда код работает, кажется, он получает дикий указатель. код разбился.
Интересно, почему он разбился
Скомпилируйте все предупреждения и информацию об отладке. Используйте отладчик, чтобы узнать, что происходит. Это зависит от того, как был вызван ваш «func1», а также от компилятора, оптимизации, процессора, ABI. Возможно, проблема выравнивания. –
потому что 1. указатель не является массивом, 2. массив не является указателем, а 3. это нарушает правило строгого псевдонижа, поэтому он имеет UB. –
@BasileStarynkevitch Кроме того, 'chx' является указателем, поэтому' & chx! = Chx'. –