gpt4 book ai didi

c - 为什么我的 addArrays 函数会出现楔形退出编译代码? (更新已修复)

转载 作者:行者123 更新时间:2023-11-30 21:05:14 27 4
gpt4 key购买 nike

我的其余函数都运行得非常好,但是最后一个函数有我的问题。该函数的目标是使用指针获取两个不同数组的值并将这些值添加到第三个数组。但是,当我运行 main 方法以使函数运行时,它会暂停一秒钟并提供不起作用的楔形退出代码。

我尝试删除 if((sizeof(*ptr1)) == (sizeof(*ptr2)){---在此插入代码---}

然而,从 for 循环来看,问题似乎只是 for 循环本身。

//===================================Broken Code========================================
#include <stdio.h>
#define MAXIMUM 1000


int sumArrays(int arr1[], int arr2[]);
int addArrays(int arr1[], int arr2[]);

int main()
{

int arrayOne[MAXIMUM];
int arrayTwo[MAXIMUM];

for(int i = 0; i <= MAXIMUM; i++)

arrayOne[i] = i;

printf("Arrayone %d\n", arrayOne);

for(int j = 0; j <= MAXIMUM; j++)

arrayTwo[j] = j;

printf("ArrayTwo %d\n", arrayTwo);

printf(" The sum of the arrays is : %d\n",sumArrays(arrayOne, arrayTwo));

printf("%d", addArrays(arrayOne, arrayTwo));

return 0;
}

int sumArrays(int arr1[],int arr2[]){

int *ptr_1;
int *ptr_2;

ptr_1 = &arr1[0];
ptr_2 = &arr2[0];

int sum;

for(int i = 0; i < MAXIMUM; i++){

sum += *ptr_1 + i;
sum += *ptr_2 + i;

}

return sum;
}

int addArrays(int arr1[],int arr2[]){

int *ptr1 = &arr1[0];
int *ptr2 = &arr2[0];
int sum = 0;
int i = 0;
int arr3[0];

if(sizeof(*ptr1) == sizeof(*ptr2)){

for(int i = 0; i < MAXIMUM; i++){

sum += *ptr1 +i;
sum += *ptr2 +i;
arr3[i] = sum;

}
}

printf("The value of array3 is %d", arr3);
}

另一个函数工作正常,但 addArrays 函数执行楔形退出并且不配合。

我希望 addArrays 函数从每个数组中获取元素,将它们添加在一起并将它们分配给第三个数组。

感谢您的宝贵时间。

更新:工作代码

#include <stdio.h>
#define MAXIMUM 1000

#define ARRAY_SZ(x) (sizeof(x) / sizeof((x)[0]))


int sumArrays(int arr1[], int arr2[], size_t len);
int addArrays(int arr1[], int arr2[], int arr3[], size_t len);

int main()
{

int arrayOne[MAXIMUM];
int arrayTwo[MAXIMUM];
int arrayThree[MAXIMUM];

for(int i = 0; i <= MAXIMUM; i++)
arrayOne[i] = i;

printf("Array One %d\n", ARRAY_SZ(arrayOne));

for(int j = 0; j <= MAXIMUM; j++)
arrayTwo[j] = j;
printf("Array Two %d\n", ARRAY_SZ(arrayTwo));

printf(" The sum of the arrays is : %d\n",sumArrays(arrayOne, arrayTwo, ARRAY_SZ(arrayOne)));
printf("%d", addArrays(arrayOne, arrayTwo, arrayThree, MAXIMUM));
return 0;
}

int sumArrays(int arr1[],int arr2[], size_t len){

int *ptr_1;
int *ptr_2;

ptr_1 = &arr1[0];
ptr_2 = &arr2[0];

int sum = 0 ;

for(int i = 0; i < len; i++){
sum += *ptr_1++;
sum += *ptr_2++;
}

return sum;
}

int addArrays(int arr1[],int arr2[], int result[], size_t len){

int *ptr1 = &arr1[0];
int *ptr2 = &arr2[0];
int *ptr3 = &result[0];
int sum = 0;
int sum2 = 0;
int i = 0;



for(int i = 0; i < MAXIMUM; i++){
sum = *ptr1 ++;
sum += *ptr2 ++;
result[i] = sum;
printf("The result of array 3 is %d\n", *ptr3++);
}

}

最佳答案

以下是一些注意事项:

当您使用数组名称分配/传递/打印数组时,您实际上是在传递数组中第一个元素的内存位置(指针)。因此,当您编写时:

printf("Arrayone %d\n", arrayOne);

您将看到正在打印的数组第一个元素的内存地址。如果您想打印整个数组,则需要循环遍历它。在这种情况下,您将打印 1000 个整数,这可能是不需要的。

void printArray(int * array, size_t len)
{
while(len--)
{
printf("%d ", *array++);
}
}

要获取数组中的元素数量,您可以执行以下操作:

sizeof(arrayOne) / sizeof(arrayOne[0])

您可以将其放入宏中,如下所示:

#define ARRAY_SZ(x)  (sizeof(x) / sizeof((x)[0]))

并这样调用它:

ARRAY_SZ(arrayOne);

如果您在函数中接收数组(它已退化为指针),则无法获取数组大小,相反,您也应该将数组大小传递给函数。在这里,因为您使用 MAXIMUM 大小初始化数组,所以我们实际上不需要计算数组大小,但我们可以只是展示它的工作原理。

如果你想返回一个数组(如addArrays()),你应该创建一个空数组并将其传递给函数,然后函数可以用结果更新数组。

循环遍历数组时,您永远不想执行array[maximum],因为数组索引范围从0maximum - 1

#include <stdio.h>
#define MAXIMUM 1000

#define ARRAY_SZ(x) (sizeof(x) / sizeof((x)[0]))

int sumArrays(int arr1[], int arr2[]);
int addArrays(int arr1[], int arr2[]);

int main()
{
int arrayOne[MAXIMUM];
int arrayTwo[MAXIMUM];
int arrayThree[MAXIMUM];

for(int i = 0; i < MAXIMUM; i++)
arrayOne[i] = i;

printf("Array one size %d\n", ARRAY_SZ(arrayOne));

for(int j = 0; j < MAXIMUM; j++)
arrayTwo[j] = j;
printf("Array Two size %d\n", ARRAY_SZ(arrayTwo));

printf(" The sum of the arrays is : %d\n",sumArrays(arrayOne, arrayTwo, ARRAY_SZ(arrayOne)));
addArrays(arrayOne, arrayTwo, arrayThree, MAXIMUM);
return 0;
}

int sumArrays(int arr1[],int arr2[], size_t len)
{
int *ptr_1;
int *ptr_2;

ptr_1 = &arr1[0];
ptr_2 = &arr2[0];

int sum;

for(int i = 0; i < len; i++){
sum += *ptr_1 + i;
sum += *ptr_2 + i;
}

return sum;
}

void addArrays(int arr1[], int arr2[], int result[], size_t len){

int *ptr1 = arr1;
int *ptr2 = arr2;
int sum = 0;
int i = 0;

for(int i = 0; i < len; i++){
sum = *ptr1 +i;
sum += *ptr2 +i;
result[i] = sum;
}

}

关于c - 为什么我的 addArrays 函数会出现楔形退出编译代码? (更新已修复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55622377/

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