İlk olarak bu örneğe bakın:
Basit bir C programı için C kodu aşağıda verilmiştir.
struct Foo {
char a;
int b;
double c;
} foo1,foo2;
void foo_assign(void)
{
foo1 = foo2;
}
int main()
{
foo_assign();
return 0;
}
Foo_assign () için Eşdeğer ASM Kodu:
00401050 <_foo_assign>:
401050: 55 push %ebp
401051: 89 e5 mov %esp,%ebp
401053: a1 20 20 40 00 mov 0x402020,%eax
401058: a3 30 20 40 00 mov %eax,0x402030
40105d: a1 24 20 40 00 mov 0x402024,%eax
401062: a3 34 20 40 00 mov %eax,0x402034
401067: a1 28 20 40 00 mov 0x402028,%eax
40106c: a3 38 20 40 00 mov %eax,0x402038
401071: a1 2c 20 40 00 mov 0x40202c,%eax
401076: a3 3c 20 40 00 mov %eax,0x40203c
40107b: 5d pop %ebp
40107c: c3 ret
Montajda bir atamanın basitçe bir "mov" komutuyla değiştirildiğini görebileceğiniz gibi, atama operatörü basitçe verileri bir bellek konumundan başka bir bellek konumuna taşımak anlamına gelir. Atama, bunu yalnızca bir yapının acil üyeleri için yapacak ve bir yapıda Karmaşık veri türlerine sahip olduğunuzda kopyalayamayacaktır. Burada KARMAŞIK, listelere işaret eden işaretçiler dizisine sahip olamayacağınız anlamına gelir.
Bir yapı içindeki bir karakter dizisi kendi başına çoğu derleyicide çalışmayacaktır, çünkü atama, veri türünün karmaşık tipte olmasına bile bakmadan kopyalamaya çalışacaktır.