以下代码是否保证可以正常工作?
这被视为良好的做法吗?还是通过常规方式添加偏移会更清晰?编辑:通过“工作”,我指的是它应该打印出在0x100处的理论成员的指针。基本上,如果这等同于“std::cout << ((unsigned int)arr + 0x100*sizeof(int))”。
int* arr = new int[2];
std::cout << &arr[0x100];
这被视为良好的做法吗?还是通过常规方式添加偏移会更清晰?编辑:通过“工作”,我指的是它应该打印出在0x100处的理论成员的指针。基本上,如果这等同于“std::cout << ((unsigned int)arr + 0x100*sizeof(int))”。
arr + 0x100
一样是未定义的。 - StoryTeller - Unslander Monica&arr[0x100]
相当于*(arr+0x100)
,这会导致地址解引用,因此是未定义的行为。而arr + 0x100
仅是一个地址计算。 - Jens