c - 在 C 中通过引用传递数组

标签 c arrays pass-by-reference

我试图通过引用传递我的数组,这样我就可以解决无法从函数返回数组的事实。我相信我正在按照我正确看到的示例进行操作。不过,出了什么问题?我期望输出是数字 0 - 9,但我得到了一些奇怪的东西。

目前我的程序没有按照说明的去做。它不做任何计算,它目前只测试引用传递。在开始尝试任何计算之前,我想确保我知道如何操作数组。

我想做的是:创建一个数字 0-9 的数组,通过引用将其传递给函数,打印函数中的每个元素。

实际程序会创建一个空数组,将其发送给函数,然后函数会用质数填充数组。

#include <stdio.h>

void primesUpTo(int max,int *resPt);
void main()
{
    const int MAX = 10;
    int primes[MAX];

    /*TEST*/for(int i = 0; i < MAX;primes[i] = ++i)

    primesUpTo(MAX,&primes);    
}

/* Primes up to function
 * Fills array that *resPt points to with primes from 0 to 'max'
 *  *resPt: pointer to first element of result array
 *  max: int, highest prime number in result array
 *  
 *  *resPt must be passed as reference
 */
void primesUpTo(int max, int *resPt)
{
    /*TEST*/for(int i = 0; i < max; i++)
        printf("\nTEST: %d",*(resPt + i)); 
}

我的编译错误然后输出:

steve@steve-VirtualBox:~/C_Programs/CIS/hw_2/ex_3$ gcc -o test printPrimes.c
printPrimes.c: In function ‘main’:
printPrimes.c:11:17: warning: passing argument 2 of ‘primesUpTo’ from incompatible pointer type [-Wincompatible-pointer-types]
  primesUpTo(MAX,&primes); 
                 ^
printPrimes.c:3:6: note: expected ‘int *’ but argument is of type ‘int (*)[(sizetype)MAX]’
 void primesUpTo(int max,int *resPt);
      ^
steve@steve-VirtualBox:~/C_Programs/CIS/hw_2/ex_3$ ./test

TEST: 1835627636
TEST: 1600061541
TEST: 1869833334
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 1869833334
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 1952802655
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 0
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 0
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 0
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 0
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 1
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 8
TEST: 0
TEST: 1835627636
TEST: 1
TEST: 2
TEST: 3
TEST: 4
TEST: 5
TEST: 6
TEST: 7
TEST: 8
TEST: 9

最佳答案

数组在 C 中总是通过引用传递。数组的名称是指向它的第一个元素的指针。所以,你只需这样做:-

void function (int arr[]){
// Some Code.....
}
int main(){
// Some Code...
int name[5];
function(name);
// Some Code...
}

这会起作用,您可以修改数组中元素的值,并且更改会反射(reflect)在调用函数中。

编辑:您知道必须在 for 循环之后添加分号吗?否则下一行也将被迭代。见 -

Corrected CodeOutput

关于c - 在 C 中通过引用传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821714/

相关文章:

Char 和 int16 数组元素都显示为 32 位十六进制?

objective-c - 使用 Objective-C 结构时防止 takeRetainedValue 或 takeUnretainedValue

c - 使用 VxWorks C 将二进制数据发送到串行端口

c++ - 在 MPI (C++) 中共享整数数组

r - 在检索 S4 引用类的字段值时避免考虑封闭帧

Javascript - 返回通过引用传递的修改对象

C 窗口 sendto()

c++ - char[] 乱七八糟的输出

c++ - 数组不从 C++ 中的文件读取数据

java - 数组似乎在 Java 中通过引用传递,这怎么可能?