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
之间的区别。提示:这是一种类型的东西。