[英]Could someone clarify this one confusion I have with C Strings, arrays versus pointers
只是一个简单的问题。
我会写
char string[] = "Hello world";
char *p = string;
printf("%s", p);
并将Hello world
打印为 output。但是指针在这里是如何工作的呢?
数组中的每个点都有一个单独的 memory 位置,对吗? 所以字符串数组是 12 长,将占用 12 memory 空间。 我认为一个指针只能指向一个 memory 位置,而不是 12 个。指针 p 是如何实现这一点的?
使用正常的 arrays 和指针,如果你想缩放你做 *p++ 的数组,因为你正在遍历每个 memory 位置并打印它的值。 为什么你必须在那里 1 对 1 地遍历数组,而在这里它只是指向整个东西?
在我看来,就像使用一个(int 数组)一样,您正在递增指针,因为每个指针只能指向一个 memory 位置,但是使用 char arrays 它可以以某种方式指向所有指针。
没错,一个指针只能指向一个 memory 位置。 在处理arrays时,指针指向第一个元素的位置。 当您使用printf
时,它基本上采用指针(指向字符串的第一个元素)并打印直到到达 null 终止字符\0
。
这是c中指针与arrays的一个很好的解释:
我认为一个指针只能指向一个 memory 位置,而不是 12 个。指针 p 是如何实现这一点的?
p
是指向char
的指针,而不是指向数组的指针。 它指向string
数组的第一个元素。
现在数组的值是指向它的第一个元素的指针,所以这个声明:
char *p = string;
实际上相当于:
char *p = &string[0];
如果增加指针:
p++;
p
将指向数组的下一个元素,即string[1]
。
指向数组的指针实际上是指向第一个地址的指针……printf 将从该地址开始扫描,直到找到 null 字符……%c 和 %s 在该行为上有所不同
您使用%s
所以它打印直到它'\0'
。
为什么你必须在那里 1 对 1 地遍历数组,而在这里它只是指向整个东西?
在这里,您使用了一个指向 char 的指针,并且您想要打印该字符串。 所以没关系。 假设,如果您使用指向 int 或其他类型的指针,这将不太有效。 所以使用了像p++
这样的指针算法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.