C字符和指向指针的字符*索引

C字符和指向指针的字符*索引,c,pointers,C,Pointers,我正在努力理解指针。当我宣布 char* buffer = malloc(10); &buffer是一个有意义的char**,如下所示 char new_buf; 其中&new\u buf是指针或char* 什么是缓冲区[5] 显然,您可以用%s打印出来,这是否使它成为一个字符串?&buffer是一个字符** 缓冲区[0]是一个字符* &缓冲区[5]是一个字符* &new\u buf是一个字符* C实际上没有字符串,只有字符数组。大多数人将char*等同于字符串,只要他们保持以0字符结尾字符

我正在努力理解指针。当我宣布

char* buffer = malloc(10);

&buffer
是一个有意义的
char**
,如下所示

char new_buf;
其中
&new\u buf
是指针或
char*

什么是缓冲区[5]


显然,您可以用
%s
打印出来,这是否使它成为一个字符串?

&buffer
是一个
字符**

缓冲区[0]
是一个
字符*

&缓冲区[5]
是一个
字符*

&new\u buf
是一个
字符*


C实际上没有字符串,只有字符数组。大多数人将
char*
等同于字符串,只要他们保持以0字符结尾字符串的惯例,它就可以工作。

char**

缓冲区[0]
是一个
字符*

&缓冲区[5]
是一个
字符*

&new\u buf
是一个
字符*


C实际上没有字符串,只有字符数组。大多数人将
char*
等同于字符串,只要他们保持字符串结尾为0字符的惯例,它就可以工作。

buffer
的类型是
char*
,因此
buffer[5]
相当于
*(buffer+5)
,它的类型是
char
。因此,
缓冲区[5]
的类型是
字符*

它是否是字符串取决于它是否以null结尾。例如,如果
buffer
指向一个字符串
“你好,你”
,那么
&buffer[5]
buffer
的开头后面指向5个字符,即
”,你“
,一个字符串

h e l l o , y o u \0
^         ^
|         |
buffer    &buffer[5]

另一个更容易理解的方法是,
buffer
相当于
&buffer[0]
,因此
&buffer[5]
是指向它后面5个字符的指针。

buffer
的类型是
char*
,所以
buffer[5]
相当于
*(buffer+5)
,具有
字符的类型。因此,
缓冲区[5]
的类型是
字符*

它是否是字符串取决于它是否以null结尾。例如,如果
buffer
指向一个字符串
“你好,你”
,那么
&buffer[5]
buffer
的开头后面指向5个字符,即
”,你“
,一个字符串

h e l l o , y o u \0
^         ^
|         |
buffer    &buffer[5]

另一个更容易理解的方法是,
buffer
相当于
&buffer[0]
,因此
&buffer[5]
是指针,它指向后面的5个字符。

buffer是10字节数组的第一个条目的地址。这与缓冲区[0]相同

&buffer[5]是数组第六个元素的地址,实际上与(buffer+5)相同


您可以调用printf(“%s”,buffer);或printf(“%s”和缓冲区[5]);如果数组包含带有空终止字符的合适ASCII字符,则这可能是明智的

缓冲区是10字节数组的第一个条目的地址。这与缓冲区[0]相同

&buffer[5]是数组第六个元素的地址,实际上与(buffer+5)相同


您可以调用printf(“%s”,buffer);或printf(“%s”和缓冲区[5]);如果数组包含带有空终止字符的合适ASCII字符,则这可能是明智的

buffer
&buffer[0]
都是相同的,都指向字符数组的第一个字符。
buffer
表示
(buffer+0)

buffer[5]
表示
*(buffer+5)


&buffer[5]
表示
(buffer+5)
buffer
&buffer[0]
都是相同的,都指向字符数组的第一个字符。
buffer
表示
(buffer+0)

buffer[5]
表示
*(buffer+5)


&buffer[5]
意味着
(buffer+5)

一旦你掌握了这个问题,抓头将是
&buffer
buffer
之间的区别。提示:这是一种类型的东西。一旦你掌握了这个问题,抓头将是
&buffer
buffer
之间的区别。提示:这是一种类型的东西。