C - 我从同一个变量中得到两个不同的点

标签 c pointers

语境
我正在研究 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 - 我从同一个变量中得到两个不同的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68987378/

相关文章:

c - 除非我使用 fseek(fp,0,SEEK_CUR),否则为什么 rb+ 模式下的 R/W 过渡文件中间失败?为什么它在文件末尾工作?

php - 如何替换内部 PHP 方法?

c - 为什么“while(!feof(file))”总是错误的?

c - C : segmentation fault 中的 sizeof(数组)

c - BF 编译器优化

c++ - 智能指针 - 程序终止时的段错误

C++ - 分配器类型提供的非平凡指针的构造是否会抛出异常?

c++ - 64 位中指针和整数的模板重载问题

c - 函数指针的大小有什么保证?

c# - 是否有执行 WPF/C# 对象取消引用以进行垃圾回收的好方法?