C – 我从同一个变量得到两个不同的指针

语境

我正在研究 C 中的指针,为此我正在测试一些指针的算法,在其中一次尝试中,我做了一些直到现在都在窃听的小改动。

这是代码:

char *s = "ABCDEF";
char **y = &s;

printf("%p\n", s);
printf("%p\n", &s);

printf("%p\n", y);
printf("%p\n", &s[0]);

问题是,出于某种原因,当我要求 C 打印 S 的指针(不带&符号)时,我收到一个指针,但是当我放置&符号时,我会收到另一个不同的指针。我认为这没有发生,因为&符号会给我 S 的地址。

因此,为了检查是否不是错误,我创建了一个带有 S 地址的指针,并且我收到了与预期相同的“&s”,但是当我使用“&s[0]”时,我收到了单个“s”。

那么,如果在这两种情况下我都只要求字符串的第一个字符,为什么 C 会给我两个结果?

我收到的价值观

0x400634
ox7ffd95c33090
ox7ffd95c33090
0x400634

我知道可能我忘记了一些逻辑,但我一直在努力解决这个问题,所以如果有人可以帮助我,我会很感激。

回答

变量s存储字符串文字的地址"ABDCDEF";变量y存储变量的地址s

    char **        char *        char
+---+          +---+         +---+
y: |   | ----> s: |   | ------> |'A'|
+---+          +---+         +---+
|'B'|
+---+
|'C'|
+---+
|'D'|
+---+
|'E'|
+---+
|'F'|
+---+
| 0 |
+---+

以上是C – 我从同一个变量得到两个不同的指针的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>