- #include <stdio.h> 
- #include <string.h> 
-   
- struct my_type_t { 
-     int x; 
-     int y; 
-     int z; 
- }; 
-   
- struct my_array_t { 
-     struct my_type_t test; 
-     int otherstuff; 
- }; 
-   
- #define GET_STRUCT_OFFSET(st, m) ((size_t) ( (char *)&((st *)(0))->m - (char *)0 )) 
- #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) 
-   
- void somefunction(struct my_array_t *arrayofstructs, size_t offset, int value) { 
-     int i; 
-     for (i = 0; i < 5; i++) { 
-         //Unfortunatly can't do straight assignment not an lvalue 
-         //if you just want to use the member as a rvalue and not assign can do so normally 
-         memcpy((((void *)&- arrayofstructs [- i ]- . test) +-  offset ), &- value , sizeof(- value ));
 
-     } 
- } 
- int main(void) { 
-     struct my_array_t arrayofstructs[5]; 
-     somefunction(arrayofstructs, GET_STRUCT_OFFSET(struct my_type_t, x), 1); 
-     somefunction(arrayofstructs, GET_STRUCT_OFFSET(struct my_type_t, y), 2); 
-     somefunction(arrayofstructs, GET_STRUCT_OFFSET(struct my_type_t, z), 3); 
-   
-     int i; 
-     for(i = 0; i<5; i++) { 
-         printf("Struct %d: X = %d, Y = %d, Z = %d\n",- i ,- arrayofstructs [- i ]- . test- . x-  \ 
 
-                                                       ,arrayofstructs[i].test.y \  
-                                                       ,arrayofstructs[i].test.z); 
-     } 
-   
-     return 0; 
- } 
-   
-   
				I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCnN0cnVjdCBteV90eXBlX3QgewogICAgaW50IHg7CiAgICBpbnQgeTsKICAgIGludCB6Owp9OwoKc3RydWN0IG15X2FycmF5X3QgewogICAgc3RydWN0IG15X3R5cGVfdCB0ZXN0OwogICAgaW50IG90aGVyc3R1ZmY7Cn07CgojZGVmaW5lIEdFVF9TVFJVQ1RfT0ZGU0VUKHN0LCBtKSAoKHNpemVfdCkgKCAoY2hhciAqKSYoKHN0ICopKDApKS0+bSAtIChjaGFyICopMCApKQojZGVmaW5lIEZJRUxEX1NJWkVPRih0LCBmKSAoc2l6ZW9mKCgodCopMCktPmYpKQoKdm9pZCBzb21lZnVuY3Rpb24oc3RydWN0IG15X2FycmF5X3QgKmFycmF5b2ZzdHJ1Y3RzLCBzaXplX3Qgb2Zmc2V0LCBpbnQgdmFsdWUpIHsKICAgIGludCBpOwogICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogICAgICAgIC8vVW5mb3J0dW5hdGx5IGNhbid0IGRvIHN0cmFpZ2h0IGFzc2lnbm1lbnQgbm90IGFuIGx2YWx1ZQogICAgICAgIC8vaWYgeW91IGp1c3Qgd2FudCB0byB1c2UgdGhlIG1lbWJlciBhcyBhIHJ2YWx1ZSBhbmQgbm90IGFzc2lnbiBjYW4gZG8gc28gbm9ybWFsbHkKICAgICAgICBtZW1jcHkoKCgodm9pZCAqKSZhcnJheW9mc3RydWN0c1tpXS50ZXN0KSArIG9mZnNldCksICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiAgICB9Cn0KaW50IG1haW4odm9pZCkgewogICAgc3RydWN0IG15X2FycmF5X3QgYXJyYXlvZnN0cnVjdHNbNV07CiAgICBzb21lZnVuY3Rpb24oYXJyYXlvZnN0cnVjdHMsIEdFVF9TVFJVQ1RfT0ZGU0VUKHN0cnVjdCBteV90eXBlX3QsIHgpLCAxKTsKICAgIHNvbWVmdW5jdGlvbihhcnJheW9mc3RydWN0cywgR0VUX1NUUlVDVF9PRkZTRVQoc3RydWN0IG15X3R5cGVfdCwgeSksIDIpOwogICAgc29tZWZ1bmN0aW9uKGFycmF5b2ZzdHJ1Y3RzLCBHRVRfU1RSVUNUX09GRlNFVChzdHJ1Y3QgbXlfdHlwZV90LCB6KSwgMyk7CiAgICAKICAgIGludCBpOwogICAgZm9yKGkgPSAwOyBpPDU7IGkrKykgewogICAgICAgIHByaW50ZigiU3RydWN0ICVkOiBYID0gJWQsIFkgPSAlZCwgWiA9ICVkXG4iLGksYXJyYXlvZnN0cnVjdHNbaV0udGVzdC54IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGFycmF5b2ZzdHJ1Y3RzW2ldLnRlc3QueSBcIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsYXJyYXlvZnN0cnVjdHNbaV0udGVzdC56KTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK
				
				
				
				
				
			 
			
				
			
			
				
	
		
		
	
	
		Struct 0: X = 1, Y = 2, Z = 3
Struct 1: X = 1, Y = 2, Z = 3
Struct 2: X = 1, Y = 2, Z = 3
Struct 3: X = 1, Y = 2, Z = 3
Struct 4: X = 1, Y = 2, Z = 3