#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
char *pointer;
char *pointer2;
strcpy(str_a, "Hello, world!\n");
pointer = str_a;
printf(pointer);
pointer2 = pointer + 2;
printf(pointer2);
strcpy(pointer2, "y you guys!\n");
printf(pointer);
}
嗨..你能告诉我输出结果如何:=
Hello, world!
llo, world!
Hey you guys!
实际上我是C.的新手。所以发现它有点难以掌握。任何关于指针的帮助都将受到高度赞赏。谢谢。
答案 0 :(得分:4)
第一个:
pointer = str_a;
printf(pointer);
pointer
指向“Hello,wold!\ n”(str_a),以便打印出来的内容。
第二个:
pointer2 = pointer + 2;
printf(pointer2);
pointer2
指向pointer
之后的2个字符,这是“Hello,wold!\ n”的第三个字符,因此打印llo world
第三个:
strcpy(pointer2, "y you guys!\n");
printf(pointer);
现在,你将'你们'复制到pointer2
中的地址,这仍然是pointer
中的两个字符,所以字符串的前两个字符仍然是相同的。
memory: H e l l o , w o r l d \ n
^ ^
pointer-+ |
pointer2------+
来自strcpy(pointer2, "y you guys!\n");
的 pointer2
覆盖,例如第一个'l'
答案 1 :(得分:0)
第一个strcpy
将引用的字符串常量复制到str_a
缓冲区中。然后通过指向其开始的指针打印缓冲区。 pointer2
设置为将两个字符指向缓冲区,而不是pointer
(两者都是指向char的类型),然后打印第三个字符的缓冲区内容。
第二个strcpy
将引用的字符串从第三个字符开始复制到缓冲区中并覆盖先前的内容。请注意,前两个字符未被覆盖,因此当写出缓冲区的全部内容时,它们会显示出来。
答案 2 :(得分:0)
指针是数字(通常是32位系统上的4个字节,64位系统上的8个字节),表示逻辑存储器中的地址。例如,如果你有4GiB的内存可用,你的指针将包含从0到4294967295的值。你可以在C中指向不同类型的东西。指针的类型不会影响它存储的地址,但它确实会影响它将如何递增。 int *a; a += 1;
会将a
增加4个字节,或者可能增加8个字节,具体取决于系统int
的大小。
strcpy(str_a, "Hello, world!\n");
将包含"Hello, world!\n"
的缓冲区复制到str_a
,这是指向20 char
的指针。 C中的数组只是从数组地址开始预先分配内存的指针。pointer = str_a;
使pointer
指向与str_a
相同的地址。pointer2 = pointer + 2;
使pointer2
在与pointer
相同的字符串中指向两个字符。strcpy(pointer2, "y you guys!\n");
使用新文本替换str_a
和pointer
中存储的原始字符串的前两个字符,因为这是pointer2
现在指向的位置。 答案 3 :(得分:0)
首先,不使用printf
说明符,使用%s
打印字符串是不好的做法。
现在关于这个问题;
声明
strcpy(str_a, "Hello, world!\n");
会将字符串"Hello, world!"
复制到str_a
。
pointer = str_a;
会将该字符串分配给pointer
。 pointer
指向字符串的第一个char
,即H
。
printf(pointer);
将打印字符串"Hello, world!"
。
pointer2 = pointer + 2;
将向pointer
添加2个单位,现在pointer2
将指向字符串char
的第三个"Hello, world!"
,即l
(拳头) )。现在pointer
和pointer2
指向相同的字符串"Hello, world!"
但具有不同的起始地址。现在
strcpy(pointer2, "y you guys!\n");
会将"y you guys!\n"
复制到pointer2
,字符串"llo, world!"
将变为"y you guys!"
。由于指向指针对象的指针所做的任何更改都会反映到指向它的所有指针,因此现在原始字符串"Hello, world!"
将成为现在"Hey you guys!"
和语句
printf(pointer);
将打印Hey you guys!
。