#include <stdio.h>
#include <string.h>
#include <stddef.h>
struct my_type_t {
int x;
int y;
int z;
};
struct my_array_t {
struct my_type_t test;
int otherstuff;
};
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 a lvalue
//if you just want to use the member as a rvalue (basically not assignment) can do so normally
memcpy((((void *)&arrayofstructs
[i
].
test) + offset
), &value
, sizeof(value
)); }
}
int main(void) {
struct my_array_t arrayofstructs[5];
somefunction
(arrayofstructs
, offsetof(struct my_type_t
, x
), 1); somefunction
(arrayofstructs
, offsetof(struct my_type_t
, y
), 2); somefunction
(arrayofstructs
, offsetof(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+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGRlZi5oPgoKc3RydWN0IG15X3R5cGVfdCB7CiAgICBpbnQgeDsKICAgIGludCB5OwogICAgaW50IHo7Cn07CgpzdHJ1Y3QgbXlfYXJyYXlfdCB7CiAgICBzdHJ1Y3QgbXlfdHlwZV90IHRlc3Q7CiAgICBpbnQgb3RoZXJzdHVmZjsKfTsKCnZvaWQgc29tZWZ1bmN0aW9uKHN0cnVjdCBteV9hcnJheV90ICphcnJheW9mc3RydWN0cywgc2l6ZV90IG9mZnNldCwgaW50IHZhbHVlKSB7CiAgICBpbnQgaTsKICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAvL1VuZm9ydHVuYXRseSBjYW4ndCBkbyBzdHJhaWdodCBhc3NpZ25tZW50IG5vdCBhIGx2YWx1ZQogICAgICAgIC8vaWYgeW91IGp1c3Qgd2FudCB0byB1c2UgdGhlIG1lbWJlciBhcyBhIHJ2YWx1ZSAoYmFzaWNhbGx5IG5vdCBhc3NpZ25tZW50KSBjYW4gZG8gc28gbm9ybWFsbHkKICAgICAgICBtZW1jcHkoKCgodm9pZCAqKSZhcnJheW9mc3RydWN0c1tpXS50ZXN0KSArIG9mZnNldCksICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiAgICB9Cn0KaW50IG1haW4odm9pZCkgewogICAgc3RydWN0IG15X2FycmF5X3QgYXJyYXlvZnN0cnVjdHNbNV07CiAgICBzb21lZnVuY3Rpb24oYXJyYXlvZnN0cnVjdHMsIG9mZnNldG9mKHN0cnVjdCBteV90eXBlX3QsIHgpLCAxKTsKICAgIHNvbWVmdW5jdGlvbihhcnJheW9mc3RydWN0cywgb2Zmc2V0b2Yoc3RydWN0IG15X3R5cGVfdCwgeSksIDIpOwogICAgc29tZWZ1bmN0aW9uKGFycmF5b2ZzdHJ1Y3RzLCBvZmZzZXRvZihzdHJ1Y3QgbXlfdHlwZV90LCB6KSwgMyk7CiAgICAKICAgIGludCBpOwogICAgZm9yKGkgPSAwOyBpPDU7IGkrKykgewogICAgICAgIHByaW50ZigiU3RydWN0ICVkOiBYID0gJWQsIFkgPSAlZCwgWiA9ICVkXG4iLGksYXJyYXlvZnN0cnVjdHNbaV0udGVzdC54IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGFycmF5b2ZzdHJ1Y3RzW2ldLnRlc3QueSBcIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsYXJyYXlvZnN0cnVjdHNbaV0udGVzdC56KTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK
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