gpt4 book ai didi

C 指向数组的指针示例停止工作

转载 作者:行者123 更新时间:2023-11-30 16:45:06 25 4
gpt4 key购买 nike

我正在研究一个示例,当我运行它时,我的代码停止运行。(请注意,我将问题翻译成英语,对于语法错误,我深表歉意。)问题是:

myShrink()函数的原型(prototype)是这样的:

void myShrink(int *param1, const int param2); 

myShrink() 函数应该找到数组 param1 的平均值,如果小于平均值,则应将元素增加 1,如果小于平均值,则应将元素减少 1它高于平均水平。 param2 是数组中的多个元素。

这是main()函数的内容:

void myStretch(int *param1, const int param2); 

int main () { int myArray[] = {2, 4, 2, 4, 2, 4};

int index;
myStretch(myArray, 6);

printf("UPDATED ARRAY: ");

for(index = 0; index < 6; index++){
printf("%d\t", myArray[index]);
}

return 0;
}

---------我们运行程序的结果:-----

更新数组:1 5 1 5 1 5

现在这是问题部分,我们需要基本上对 myShrink() 函数的内容进行编程,这是我的工作:

void myShrink(int *param1, const int param2)
{
int array[param2];
param1=array;//Using pointer to point elements of array
int average=0;
int i,j;
for(i=0;i<param2;i++)
{
average+=*(param1 + i);//Adding each element of array
}
average=average/param2;//Then dividing result to param2 to find average

for(j=0;j<param2;j++)
{
if(*(param1+j)<average)//if below average
{
*(param1+j)+=1;//increment
}
else if(*(param1+j)>average)//if above average
{
*(param1+j)-=1;//decrement
}
}
}

但是当我运行它时它停止工作。我在哪里犯了错误,该如何修复?

最佳答案

只需这样做:

#include<stdio.h>

void myStretch(int *param1, const int param2);

int main () { int myArray[] = {2, 4, 2, 4, 2, 4};

int index;
myStretch(myArray, 6);

printf("UPDATED ARRAY: ");

for(index = 0; index < 6; index++){
printf("\n%d\t", myArray[index]);
}

return 0;
}

void myStretch(int *param1, const int param2)
{

int average=0;
int i,j;
for(i=0;i<param2;i++)
{
average+=*(param1 + i);//Adding each element of array
}
average=average/param2;//Then dividing result to param2 to find average

for(j=0;j<param2;j++)
{
if(*(param1+j)<average)//if below average
{

(*(param1+j))+=1;//increment
}
else if(*(param1+j)>average)//if above average
{
printf("%d ",(*(param1+j)));
(*(param1+j))-=1;//decrement
}
}
}

现在第一件事:你的结果是错误的。它应该是 3 3 3 3 3 3。由于本例中的平均值是 3,因此 2 将变为 3,4 也将变为 3。其次,您不必在函数内分配新数组。就这样做吧。第三个错误:

*(param1+j)>average

应替换为

(*(param1+j))>average

对于小于号也类似。更新:另请注意,许多人认为 array[param2] 是否合法。当您声明这样的数组时,它们被称为可变长度数组(VLA)。现代 C 编译器允许这样做,但 Turbo C 等较旧的编译器不允许。

关于C 指向数组的指针示例停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com