C:为什么将整数的二维数组分配给int **会导致CLION突出显示该行?
问题描述:
这可能听起来像以前问的问题 - 有一大堆的问题在那里大约在C数组和指针的区别,但它们都没有提供相当足够的信息来回答这个问题。我知道一个C数组的名称被C编译器视为一个指向内存块开始的指针,但是当我尝试将一个3x3的二维数组的名称赋值给int **
在我的克利翁IDE,它凸显了分配,并说:C:为什么将整数的二维数组分配给int **会导致CLION突出显示该行?
不兼容的指针类型 '诠释*' 和 'INT [3] [3]'
int x[3][3];
int **px = x; <-- warning here
我可以投的分配值(int **),当然高光消失,但 - 嘿 - 你可以施放C中的很多东西,并获得亮点消失。这并不意味着你要求的东西会起作用。
这只是一个克利翁(或者可能更恰当,铿锵整齐)的问题,或者是一个真正的问题?
[编辑]
对于某些情况下,对阵列/指针差异,所有其他的答案的问题是,很多人说这样的话“,因为一个3x3的阵列是不是INT **,这就是为什么! “谢谢,但这是一个相当无用的信息 - 提出问题的人可能已经知道3x3数组不是int ** - 问题是编译器如何在赋值之后处理结果int ** - 它是否会正确索引数组还是不?
你可以发表有问题的线吗? – Blacksilver
二维数组是**不是**指针数组,这就是为什么。 –
'int **'是'int *'的顺序列表;一个'int [3] [3]'是一个由3个连续3个列表组成的连续列表。通过解析数组的第一个元素的地址,int []会衰减为int *',但这不能传递。 – zneak