#include <stddef.h>
#include <iostream>
using namespace std;
// https://w...content-available-to-author-only...t.org/confluence/display/seccode/EXP08-C.+Ensure+pointer+arithmetic+is+used+correctly
struct big {
unsigned long long ul1_1; // 8
unsigned long long ul1_2; // 8
unsigned long long ul1_3; // 8
int si_4; // 4
int si_5; // 4
};
void getAdrs(void *p) {
cout << p << endl;
}
int main() {
size_t skip = offsetof(struct big, ul1_2);
struct big *s = (struct big *)malloc(sizeof(struct big));
cout << skip << endl; // 8
getAdrs(s ); // 0x9a38008
getAdrs(s + skip ); // 0x9a38108 (+256)
// getAdrs((char *)s + skip); // 0x9a38010 (+2)
getAdrs((char *)s + skip); // 0x9a38010 (+8 NOT +2) // modified
unsigned long long val[4];
getAdrs(&val[0]); // 0xbfacc0f0
getAdrs(&val[1]); // 0xbfacc0f8 (+8)
getAdrs(&val[2]); // 0xbfacc100 (+16)
free(s);
s = NULL;
return 0;
}
I2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnQub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9zZWNjb2RlL0VYUDA4LUMuK0Vuc3VyZStwb2ludGVyK2FyaXRobWV0aWMraXMrdXNlZCtjb3JyZWN0bHkKCnN0cnVjdCBiaWcgewoJdW5zaWduZWQgbG9uZyBsb25nIHVsMV8xOyAvLyA4Cgl1bnNpZ25lZCBsb25nIGxvbmcgdWwxXzI7IC8vIDgKCXVuc2lnbmVkIGxvbmcgbG9uZyB1bDFfMzsgLy8gOAoJaW50IHNpXzQ7IC8vIDQKCWludCBzaV81OyAvLyA0Cn07Cgp2b2lkIGdldEFkcnModm9pZCAqcCkgewoJY291dCA8PCBwIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJc2l6ZV90IHNraXAgPSBvZmZzZXRvZihzdHJ1Y3QgYmlnLCB1bDFfMik7CgoJc3RydWN0IGJpZyAqcyA9IChzdHJ1Y3QgYmlnICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmlnKSk7CgoJY291dCA8PCBza2lwIDw8IGVuZGw7IC8vIDgKCglnZXRBZHJzKHMgICAgICAgICAgICAgICApOyAvLyAweDlhMzgwMDggCglnZXRBZHJzKHMgKyBza2lwICAgICAgICApOyAvLyAweDlhMzgxMDggKCsyNTYpCi8vCWdldEFkcnMoKGNoYXIgKilzICsgc2tpcCk7IC8vIDB4OWEzODAxMCAoKzIpCglnZXRBZHJzKChjaGFyICopcyArIHNraXApOyAvLyAweDlhMzgwMTAgKCs4IE5PVCArMikgLy8gbW9kaWZpZWQgCgoJdW5zaWduZWQgbG9uZyBsb25nIHZhbFs0XTsKCWdldEFkcnMoJnZhbFswXSk7IC8vIDB4YmZhY2MwZjAKCWdldEFkcnMoJnZhbFsxXSk7IC8vIDB4YmZhY2MwZjggKCs4KQoJZ2V0QWRycygmdmFsWzJdKTsgLy8gMHhiZmFjYzEwMCAoKzE2KQoJCglmcmVlKHMpOwoJcyA9IE5VTEw7CgoJcmV0dXJuIDA7Cn0=