Не делайте этого: используйте memcpy
Существует способ выполнить назначение с помощью одного оператора, если вы готовы выполнить некоторые предварительные настройки длясделать ваш код неразборчивымВы можете использовать тот факт, что структуры могут (1) быть назначены друг другу за один шаг, и (2) содержать массивы фиксированного размера.Компилятор, вероятно, все равно будет запускать memcpy
под колпаком, но это забавное упражнение в нелепости:
#include<stdio.h>
#define SZ 3 // this is just for convenience
// a pointer to an anonymous structure containing our array
typedef struct {
int x[SZ];
} *pthrowaway;
int main(void)
{
int A[SZ]={1,2,3};
int B[4][SZ]={0};
int row_select=2;
pthrowaway a = (pthrowaway)&A;
pthrowaway b = (pthrowaway)&B[row_select];
*b = *a; // magic
return 0;
}
Переменные a
и b
не нужны.Вы можете назначить массивы одним оператором:
*(pthrowaway)&B[row_select] = *(pthrowaway)&A;
Вот ссылка IDEOne, показывающая версию C99: https://ideone.com/IQ6ttg А вот обычная версия C: https://ideone.com/pH1hS2