gpt4 book ai didi

c - 获取指向 char 的三重指针的地址

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:07 26 4
gpt4 key购买 nike

海湾合作委员会 4.4.4 c89

我只是想知道为什么我得到不同的内存地址。当我在 main 中打印动物的地址时,我得到以下信息:

animals [ rabbit ] : [ 0xbfab2e48 ]
animals [ rabbit ] : [ 0xbfab2e48 ]

但是,当我在函数中打印时,我得到了不同的内存位置。我认为它们应该是一样的。

ptr animals [ rabbit ] : [ 0xbfab2e08 ]
ptr animals [ rabbit ] : [ 0xbfab2e08 ]

非常感谢任何建议,

int main(void)
{
char *animals[] = {"rabbit", "cat", "dog", "elephant", "racoon", NULL};
char *countries[] = {"india", "amercia", "france", "spain", "canada", "mexico", NULL};
char *cars[] = {"ford fista", "Masda 3", "honda city", "toyata cote", NULL};
char **ptr_data[] = {animals, countries, cars, NULL};

printf("animals [ %s ] : [ %p ]\n", *animals, (void*)animals);
printf("animals [ %s ] : [ %p ]\n", animals[0], &animals[0]);

print_data_ptr(ptr_data);

return 0;
}

void print_data_ptr(char ***ptr)
{
char **data_list = NULL;

printf("ptr animals [ %s ] : [ %p ]\n", *ptr[0], (void*)&ptr[0]);
printf("ptr animals [ %s ] : [ %p ]\n", **ptr, (void*)ptr);
}

最佳答案

animalschar * 的数组值,和 ptr_datachar ** 的数组值(value)观。

当你初始化 ptr_data在这一行中:

char **ptr_data[] = {animals, countries, cars, NULL};

animals被评估为指向其第一个元素的指针 - 所以 ptr_data[0]&animals[0]相同- 第一个地址char *animals .同样的事情发生在你的两个 printf()主要功能 - animals&animals[0]评估为同一事物,这也是存储在 ptr_data[0] 中的指针值.

在你的函数中,ptr是指向 ptr_data 的第一个元素的指针在主要 - 所以 ptr相当于&ptr_data[0] . &ptr[0]完全等同于ptr - 所以 &ptr[0]向您显示 ptr_data[0] 的地址,而不是那里存储的内容。如果你打印 ptr[0]相反,您将获得 animals[0] 的地址.

关于c - 获取指向 char 的三重指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823790/

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