函数中的C数组指针[重复]

Posted

技术标签:

【中文标题】函数中的C数组指针[重复]【英文标题】:C array pointer in function [duplicate] 【发布时间】:2021-12-27 22:14:23 【问题描述】:

我写了这个函数:

int einmaleins(int zahl, int *arr)
int e;
for(int i = 1; i<11; i++)
    e = zahl*i;
    arr[i-1]=e;


return 0;


int main()
int arr[10] = 0;
einmaleins(2, &arr[10]);

return 0;

问题是指针数组,但是当我启动程序时,我收到以下消息:***检测到堆栈粉碎***:终止

我真的不知道该怎么办。

【问题讨论】:

&amp;arr[10] - 这是指向数组第十一个元素的指针。其中只有十个元素... @EugeneSh。对,奇怪的代码,我需要咖啡 您使用 IDE 吗?如果没有,我建议你买一个。然后了解调试器。您可以在代码中设置“断点”(或多个)并运行代码。当它到达断点时,它将停止,您可以检查变量,然后逐行单步执行您的代码,观察变量。这通常是查找此类问题的最快方法。 【参考方案1】:

在本次通话中

einmaleins(2, &arr[10]);

您将内存地址传递给数组的最后一个元素。

像这样调用函数

einmaleins(2, arr);

在调用中用作参数表达式的数组指示符被隐式转换为指向其第一个元素的指针,

其实调用就等价于

einmaleins(2, &arr[0]);

【讨论】:

【参考方案2】:

排队

einmaleins(2, &amp;arr[10]);

表达式&amp;arr[10] 会将第11 个 元素的地址(在C 中,索引从0 开始)传递给函数einmaleins。这可能不是您想要的,因为这会导致函数einmaleins 越界访问数组。

你可能想传递第一个元素的地址,所以你可以写成&amp;arr[0]。但是,简单地写arr是正常的。当你这样做时,数组会自动decay指向第一个元素的指针,这样就相当于写&amp;arr[0]

【讨论】:

以上是关于函数中的C数组指针[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过c中的指针传递二维数组[重复]

指向整个数组的C ++指针[重复]

C语言函数指针,敲黑白,讲重点,如何定义函数指针?

C/C++中的指针

数组是指针? [重复]

13. 再论C语言中的指针