gpt4 book ai didi

arrays - 打印 C 中存储指向数组的指针的地址

转载 作者:行者123 更新时间:2023-12-02 01:57:13 25 4
gpt4 key购买 nike

这个问题可能看起来很重复;不过这个网站我确实认真考察过,还是不太明白。

    char str[] = "test";
printf("%p\n", str);
printf("%p\n", &str);

我知道str它本身是一个指针,指向存储“t”的起始位置。因此我预计printf("%p\n", str);显示此地址(例如 000000FFE94FFC34 )。接下来,我想知道在我的操作系统中,存储确切信息的内存位置000000FFE94FFC34 。 (即 str 本身的地址。)

但是,第三行的输出与前一行相同。这似乎是一个很奇怪的行为。我怎样才能找出str的地址本身?我想这可以通过使用另一个指向我想要的指针的新指针来实现,即 char **super_pointer = str;但我认为这是一种不必要的复杂方式。

最佳答案

让我们用添加的指针将其绘制出来,希望使其更易于理解:

+--------+--------+--------+--------+--------+| str[0] | str[1] | str[2] | str[3] | str[4] |+--------+--------+--------+--------+--------+^|&str[0]|&str

正如您所看到的,指向第一个元素的指针(&str[0] 这是普通的 str 衰减到的)指向与数组本身相同的位置( &str)。

但是(这是一个重要的但是):类型非常不同!

&str[0]的类型为char *

&str的类型为char (*)[5]


在另一张纸条上你这么说

... str itself is a pointer...

这是错误str 本身是数组,它可以衰减为指向其第一个元素的指针。

关于arrays - 打印 C 中存储指向数组的指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69503850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com