我想了解指针。当我宣布
时char* buffer = malloc(10);
&buffer
是一个有意义的char**
并且跟随
char new_buf;
其中&new_buf
是指针或char*
什么是&buffer[5]
?
显然你可以用%s
打印出来,那么它是否会成为一个字符串?
答案 0 :(得分:3)
buffer
的类型为char *
,因此buffer[5]
等同于*(buffer + 5)
,其类型为char
。因此&buffer[5]
的类型为char *
。
它是否是字符串取决于它是否为空终止。例如,如果buffer
指向字符串"hello,you"
,则&buffer[5]
在buffer
开始后指向5个字符,即",you"
,即字符串。
h e l l o , y o u \0
^ ^
| |
buffer &buffer[5]
另一种更容易理解的方法是,buffer
相当于&buffer[0]
,因此&buffer[5]
是指向其后5个字符的指针。
答案 1 :(得分:1)
&buffer
是char**
&buffer[0]
是char*
&buffer[5]
是char*
&new_buf
是char*
C实际上没有字符串,只是字符数组。大多数人将char*
等同于一个字符串,只要它们保持以0字符结束字符串的约定就行。
答案 2 :(得分:0)
buffer是10字节数组的第一个条目的地址。这与& buffer [0]相同。
& buffer [5]是数组第六个元素的地址,实际上与(buffer + 5)
相同你可以调用printf(“%s”,缓冲区);或printf(“%s”,& buffer [5]);如果数组包含具有空终止字符的合适ASCII字符,则可能会做一些合理的事情。
答案 3 :(得分:0)
buffer
和&buffer[0]
都是相同的,并指向字符数组的第一个字符。
buffer
表示(buffer+0)
buffer[5]
表示*(buffer+5)
&buffer[5]
表示(buffer+5)
。