我正在搜索C中的指针,我发现了这个问题。基本上,用户想知道如何在 C 中将矩阵作为函数的参数传递。得票最多的答案是他不能使用指针到指针(类型 ** 标识符),因为:
(...) 任何静态 2D 数组都要求第二级指针是指向静态数组的常量指针
当他说"常量指针指向静态数组"时,他是什么意思?这是如何编码的?我知道常量变量(包含指针)是什么意思,所以也是静态变量。但是,在这种情况下,为什么它必须是指向静态数组的常量指针?
当他说"常量指向静态数组的指针"时,他指的是什么?
我想他的意思是说数组需要被视为连续的;它需要是一个接一个的元素序列,没有指针的空间。他可能试图声称取消引用一次二维数组(例如*mat
或mat[0]
) 应该导致一个指向子数组的常量(在某些情况下也是不正确的,当用作sizeof
的操作数时,我将很快介绍其中之一)。
FWIW,这也是不正确的:
如果矩阵是动态数组,则前面的标头是正确的。
int mat[SIZE][SIZE];
如果我们检查这个对象,sizeof mat
等于sizeof (int) * SIZE * SIZE
;在这个矩阵中没有任何指针存储的空间。然而,在void ins (int **matrix, int row, int column);
中,int **matrix
告诉我们matrix
指向int *
,这意味着有指针的空间,也暗示matrix
可能不是连续的。
。这是如何编码的?
对于这个问题,不正确,因为int **
指向int *
对象,而不是int[SIZE]
对象。
。为什么它必须是指向静态数组的常量指针?
请参阅此答案的第一段。