gpt4 book ai didi

C:为什么将 2D 整数数组分配给 int** 会导致 CLION 突出显示该行?

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

这可能听起来像是一个以前问过的问题 - 关于 C 中数组和指针之间的区别有很多问题,但没有一个提供足够的信息来回答这个问题。

我知道 C 编译器将 C 数组的名称视为指向内存块开头的指针,但是当我尝试将 3 x 3 二维整数数组的名称分配给 int ** 在我的 CLION IDE 中,它突出显示了分配并说:

Incompatible pointer types 'int * *' and 'int [3][3]'

int x[3][3];
int **px = x; <-- warning here

我可以将分配的值转换到 (int**),高亮当然会消失,但是 - 嘿 - 你可以在 C 中转换大量的东西并让高亮消失。并不意味着您所要求的会奏效。

这只是一个 CLION(或者更恰本地说,clang tidy)问题,还是一个真正的问题?

[编辑]

在某些情况下,关于数组/指针差异的所有其他答案的问题在于,他们中的许多人都说“因为 3x3 数组不是 int **,这就是原因!”谢谢,但这是一条相当无用的信息 - 提出问题的人可能已经知道 3x3 数组不是 int ** - 问题是编译器如何在赋值后处理生成的 int ** - 它是否会正确索引阵列与否?

最佳答案

虽然有人可以纠正我这个多维数组可能不是而且通常不会实现为指针数组,但它是连续的内存块,上面有一些语法糖用于取消引用。

参见 this了解详情。

关于C:为什么将 2D 整数数组分配给 int** 会导致 CLION 突出显示该行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46834526/

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