gpt4 book ai didi

更改常量指针的内存位置

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:11 27 4
gpt4 key购买 nike

我有程序

void alloc(char **p)
{
*p=(char*)malloc(sizeof(char)*3);
(*p)[0]='a';
(*p)[1]='f';
(*p)[2]='\0';

}
main()
{
char p[]="hrrgr";
alloc(&p);

printf("%s",p);
}

它什么都不打印。请解释一下。我通过传递 char*p 知道;而 alloc(&p) 就可以了。但我的问题的目的是了解我得到的输出。

最佳答案

p 是一个包含 6 个字符的数组。因此 pchar[6] 类型。 &p指向 char[6] 类型的指针,即 char (*)[6]。当您将数组传递给函数时,它的计算结果是指向其第一个元素的指针。因此,当您将 char (*)[6] 类型的值传递给您的 alloc 函数时,您正在分配一个 char (*)[6] 类型转换为 char ** 类型。它们是不兼容的类型并且具有不同的指针算法。您不能使 char (*)[6] 表现char ** 类型,即使通过只会抑制编译器警告的类型转换也是如此.

关于更改常量指针的内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21961077/

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