gpt4 book ai didi

C - 'char **' 与 'char (*)[6]' 的间接级别不同

转载 作者:太空狗 更新时间:2023-10-29 16:40:58 25 4
gpt4 key购买 nike

有人可以向我解释以下内容有什么问题吗,更重要的是为什么?

int main( int argc, char *argv[] )
{
char array[] = "array";
char **test;
test = &array;

*test[0] = 'Z';

printf( "%s\n", array );

return 0;
}

编辑

我上面的例子是基于这样一个崩溃的函数:

void apple( char **pp )
{
*pp = malloc( 123 );
*pp[0] = 'a'; // technically this is correct but in bad form
*pp[1] = 'b'; // incorrect but no crash
*pp[2] = '\0'; // incorrect and crash
}

正如 Vaughn Cato 向我指出的,虽然 *pp[0] = 'a'; 没有崩溃,但它的状态很差。正确的形式是括号

void apple( char **pp )
{
*pp = malloc( 123 );
(*pp)[0] = 'a'; // correct
(*pp)[1] = 'b'; // correct
(*pp)[2] = '\0'; // correct
}

还有另一位发帖人 MK 指出,FAQ 涵盖了数组和指针之间的区别: http://www.lysator.liu.se/c/c-faq/c-2.html

最佳答案

test = &array

是错误的,因为测试的类型是 char**&arraychar(*)[6] 并且是不同的类型来自 char**

数组与 char* 的类型不同,尽管在某些情况下 C 会在数组类型和 char* 之间隐式转换,但这不是其中之一。基本上,char* 与数组类型(例如:char[6])相同的期望是错误的,因此期望获取数组的地址将导致 char** 也是错误的。

关于C - 'char **' 与 'char (*)[6]' 的间接级别不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7524070/

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