【发布时间】:2011-11-27 01:16:28
【问题描述】:
int main()
{
matrix[2][4] = {{11,22,33,99},{44,55,66,110}};
int **ptr = (int**)matrix;
printf("%d%d",**matrix,*ptr);
}
但是当二维数组作为参数传递时,它会被类型转换为 (*matrix)[2] .. 编译器将此数组存储为什么类型......它是存储为二维数组还是双指针或指向数组的指针..如果它存储为数组,它在上述不同情况下如何以不同方式解释.请帮我理解。
【问题讨论】:
-
指针不是数组,数组也不是指针。数组(无论它们有什么维度)在传递给函数时衰减为(单个)指针。
-
(int) matrix有点毫无意义。它强制matrix两次衰减为指向整数的指针,但将指针转换为整数的结果是未定义的。 -
@David Schwartz:
(int)matrix会衰减一次(不是两次)matrix,结果不是未定义,而是实现定义。 -
@jpalecek:实现定义意味着实现可以随意做任何事情。所以如果你不知道实现,你就没有定义。在实现未知的上下文中,它是未定义的。 (不是正式意义上的“未定义”,在正常意义上。)
-
在 C 语言中,不要将调用结果转换为
malloc()、realloc()或calloc()- 这是不必要的,并且可能掩盖了缺少原型的严重错误。