字符指针等于缓冲区加上缓冲区大小?

Char pointer equal to buffer plus buffer size?

谁能给我解释一下这段代码?或者确认我的看法?

char *buffer分配指向"Hello World[=11=]"
buffer_size 是 12.

所以:

char *var = buffer + buffer_size - 1;

现在 *var 指向 "Hello World" 中的 'd',对吗?

如果仅按字符串长度,则指向'd'。

char_pointer + 0指向字符串的开始'h'+1指向'e'所以+ n指向第n + 1特点。 char_pointer + buffer_size - 1 == 'd'!

编辑:仅当 buffer_lengthstrlen 确定时才成立,这将给出 11。如果它是 12,其中包括终止 [=21=],它将指向那个。

H e l l o _ W o r l d [=10=]
0 1 2 3 4 5 6 7 8 9 10 11

如评论中所述,您应该像这样初始化 buffer

const char *buffer = "Hello World";

然后注意sizeof(buffer)只是一个指针的大小,而不是字符串的长度。所以buffer_size应该初始化为

size_t buffer_size = strlen( buffer ) + 1;

这会将 buffer_size 设置为 12。因此,如果您想要指向 d 的指针,则为

const char *var = buffer + buffer_size - 2;

指向 varbuffer[10]