【发布时间】:2020-03-11 02:41:12
【问题描述】:
编辑: 在下面我在代码示例部分中进一步编写的示例中,声明返回类型为 array pointer 的函数的正确语法应如下所示:
int (*my_function(void))[10]
{
...
}
对于可能遇到相同问题的未来读者的重要提示:不要 typecast malloc!只是不要。感谢 user3386109 的那个。 Further reading on the why.
感谢 Andrew Henle 和 Eric Postpischil 的回答。 Here's真的很好的解释,如果有人想进一步阅读该主题。 原帖如下:
什么我想知道
如何在 C 中返回指向数组的指针。
为什么我想知道
因为它(是?)应该可以这样做。
为了什么我想要它
从函数返回多维数组。
“你尝试过结构体吗?”
是的,但这与结构无关。这个线程的重点(不是双关语)是用 pointers 来做的。
代码示例
我的例子是错误的,所以我在这里问的原因,但在这里:
int (*)[10]my_function(void) // Should be returning a type of array pointer to 10-elements array. Sure enough it's not.
{
int (*ptr)[10] = (int (*)[10]) malloc(10 * sizeof(int));
return ptr;
}
int main(void)
{
printf("Address of ptr is: %d", my_function());
return 0;
}
如您所见,我也不确定如何将 malloc 类型转换为指向 10 元素数组的数组指针。如果你知道怎么做,请告诉我。
重要提示
据我所知,在这种情况下使用双指针(指向指针的指针)是错误的。 代码示例:
int **my_function(void); // WRONG, afaik
基本原理:this 视频,16:22。
我已经尝试在网上搜索,并且在一些书籍中,他们有使用结构体、指向数组的指针作为函数参数的示例,但不是这个。
如果您对这个主题有一些了解,请回复,我将不胜感激。
【问题讨论】:
-
“我不确定如何对 malloc 进行类型转换”。简单的。别。 You should not cast the return value from malloc.
-
如果你做了
typedef int tenIntArray[10];,你期望从数组的开头有多少个普通的int元素tenIntArray *example = ...;然后example[ 2 ]是?提示:这不是第三个int元素... -
@user3386109 谢谢,我不知道。在我链接到的关于指针的教程系列中,讲师说要 typecast malloc,所以我只是认为这是正确的。
-
@ward0 我没有看过视频,但是如果讲师使用的是 MSVC,请注意 MSVC 实际上是一个 C++ 编译器,对当前标准 C 的支持有限——它不是一个兼容的 C 编译器30 岁的 C89。
-
@Andrew Henle 他确实在使用 MSVC,可能是这样。
标签: c arrays function multidimensional-array return