Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何正确求和数组的元素,以获得较大的随机输出_C_Arrays_Pointers - Fatal编程技术网

C 如何正确求和数组的元素,以获得较大的随机输出

C 如何正确求和数组的元素,以获得较大的随机输出,c,arrays,pointers,C,Arrays,Pointers,我编写了两个函数,并调用main中的函数 函数1–我编写了一个函数,返回void,并使用int*指针指向整数数组或int[],int表示大小。函数需要将数组的所有元素初始化为非零值 函数2–我编写了另一个函数,它返回int,并获取指向整数数组或int[]的const int*指针,int表示大小。函数应该对数组的所有元素求和并返回和 我主要定义了一个大小为5的整数数组。在main中调用函数1来初始化数组的值。在main中调用函数2以获取和并将和的值打印到控制台 我的问题是程序运行了,但是我们得到

我编写了两个函数,并调用main中的函数

函数1–我编写了一个函数,返回void,并使用int*指针指向整数数组或int[],int表示大小。函数需要将数组的所有元素初始化为非零值

函数2–我编写了另一个函数,它返回int,并获取指向整数数组或int[]的const int*指针,int表示大小。函数应该对数组的所有元素求和并返回和

我主要定义了一个大小为5的整数数组。在main中调用函数1来初始化数组的值。在main中调用函数2以获取和并将和的值打印到控制台

我的问题是程序运行了,但是我们得到的打印出来的总和是一个数以百万计的大随机数,不是预期的15。任何能帮助我们得到正确答案的人都将不胜感激

行*ptr=1,2,3,4,5;指定ptr[0]值,并使其他点单位化,因此当求和时,它将是随机内存

您应该使用这样的来初始化

   for(int i=0;i<size;i++)
   {
          ptr[i] = i+1;
   }
并用类似的方法求和。

Line*ptr=1,2,3,4,5;指定ptr[0]值,并使其他点单位化,因此当求和时,它将是随机内存

*ptr = 1, 2, 3, 4, 5;
您应该使用这样的来初始化

   for(int i=0;i<size;i++)
   {
          ptr[i] = i+1;
   }
用同样的方法来总结

*ptr = 1, 2, 3, 4, 5;
不会做你认为它会做的事。它实际上计算所有整数常量,但将ptr[0]设置为1。有关详细信息,请参见逗号运算符,将所有其他常量保留为任意值

请注意,它不是在计算将*ptr设置为5的*ptr=1,2,3,4,5,而是在实际计算*ptr=1,2,3,4,5——这是有效的,因为类似42的东西实际上是一个有效的C语句,尽管不是很有用

如果试图将数组设置为递增值,只需使用以下命令:

for (int i = 0; i < size; i++)
    ptr[i] = i + 1;
然后,您可以将printf放入调用者main中,如下所示:

int main(void)
{
    int grid[5];

    func1(grid, sizeof(grid) / sizeof(*grid));
    int sum = func2(grid, sizeof(grid) / sizeof(*grid));
    printf("The sum of the integers in the array is %d.\n\n", sum);
    return 0;
}
请注意sizeofgrid/sizeof*grid的使用,它基本上是网格中数组元素的数量-这将允许您只需在一个位置将网格更改为int grid[42]之类的值,即可调整网格大小,并且所有代码都可以使用更新的大小

实际上,代码并不需要这样做,但最好尽早养成良好的编程习惯,为函数提供更具描述性的名称也可能是一个好主意

不会做你认为它会做的事。它实际上计算所有整数常量,但将ptr[0]设置为1。有关详细信息,请参见逗号运算符,将所有其他常量保留为任意值

请注意,它不是在计算将*ptr设置为5的*ptr=1,2,3,4,5,而是在实际计算*ptr=1,2,3,4,5——这是有效的,因为类似42的东西实际上是一个有效的C语句,尽管不是很有用

如果试图将数组设置为递增值,只需使用以下命令:

for (int i = 0; i < size; i++)
    ptr[i] = i + 1;
然后,您可以将printf放入调用者main中,如下所示:

int main(void)
{
    int grid[5];

    func1(grid, sizeof(grid) / sizeof(*grid));
    int sum = func2(grid, sizeof(grid) / sizeof(*grid));
    printf("The sum of the integers in the array is %d.\n\n", sum);
    return 0;
}
请注意sizeofgrid/sizeof*grid的使用,它基本上是网格中数组元素的数量-这将允许您只需在一个位置将网格更改为int grid[42]之类的值,即可调整网格大小,并且所有代码都可以使用更新的大小


代码实际上不需要,但最好尽早养成良好的编程习惯。函数的描述性名称也可能是一个好主意。

您应该通过循环大小参数来设置值。您在这里期望什么:*ptr=1,2,3,4,5;?我试图初始化一个数组,其中包含5个不同的整数元素1,2,3,4,5,稍后我将使用它在第二个函数中创建一个15的和。@Code peedient此问题被标记为纯C,因此可能不存在此问题。&sum:Remove&。您应该通过循环大小参数来设置该值。您希望在这里得到什么:*ptr=1,2,3,4,5;?我试图初始化一个数组,其中包含5个不同的整数元素1、2、3、4、5,稍后我将使用这些元素在第二个函数中创建一个15的和。@代码学徒此问题被标记为纯C,因此可能不存在此问题。&sum:Remove&。它不会分配ptr[0]5次。它不会分配ptr[0]5次。