【发布时间】:2019-08-08 08:15:02
【问题描述】:
如果结构体中有指向结构体其他成员的指针,如果我们从函数返回结构体,是否可以保证这些指针仍指向结构体的内部成员?
以这个小尺寸优化的缓冲区结构为例:
#include <stdint.h>
#include <stdio.h>
struct buffer {
uint8_t *begin;
uint8_t *end;
uint8_t sso[20];
};
struct buffer test() {
struct buffer buffer;
buffer.begin = buffer.sso;
buffer.end = buffer.begin + 20;
return buffer;
}
int main(void) {
struct buffer buffer = test();
return buffer.begin == buffer.sso ? 0 : 1;
}
当我在本地编译这段代码并运行它时,它返回 0 所以buffer.begin 仍然指向buffer.sso 的开头。但是,这是否保证始终是大小写,还是我取决于特定于编译器的 RVO 行为?
【问题讨论】:
-
我的测试返回 1。它要求两个
structs在内存中的相同位置。如果您添加struct buffer buffer2 = buffer;,您会期望地址发生神奇的变化吗?
标签: c