有人可以向我解释这段代码吗?或者确认一下我的看法?
分配 char *buffer
指向"Hello World\0"
buffer_size
是12。
所以:
char *var = buffer + buffer_size - 1;
现在*var
指向'd'
中的"Hello World"
,对吗?
答案 0 :(得分:6)
H e l l o _ W o r l d \0
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;
将var
指向buffer[10]
。
答案 1 :(得分:1)
如果单独使用字符串长度,则指向'd'。
char_pointer + 0
指向字符串'h'
的开头,+1
指向'e'
,因此+ n
指向n + 1
个字符。 char_pointer + buffer_size - 1 == 'd'
!
编辑:仅在buffer_length
确定strlen
时才会成立,这将11
。如果是12
,其中包含终止\0
,则会指向该内容。