c - 在 C 中传递数组指针

标签 c arrays pointers

所以我有一些看起来像这样的代码:

int a[10];
a = arrayGen(a,9);

arrayGen 函数如下所示:

int* arrayGen(int arrAddr[], int maxNum)
{
    int counter=0;
    while(arrAddr[counter] != '\0') {
        arrAddr[counter] = gen(maxNum);
        counter++;
    }
    return arrAddr;
}

现在编译器告诉我“警告:传递‘arrayGen’的参数 1 从指针生成整数而不进行强制转换”

我的想法是传递 'a',一个指向 a[0] 的指针,然后由于数组已经创建,我可以只填充 a[n] 的值直到我 a[n] == '\0 '.我认为我的错误是 arrayGen 被写成接受一个数组,而不是指向一个数组的指针。如果这是真的,我不确定如何继续,我是否将值写入地址直到一个地址的内容为“\0”?

最佳答案

这里的基本魔法是 C 中的恒等式:

*(a+i) == a[i]

好的,现在我会让它变成可读的英文。

问题是:数组名不是左值;它不能被分配给。所以你有这条线

a = arrayGen(...)

是问题所在。看这个例子:

int main() {
    int a[10];

    a = arrayGen(a,9);

    return 0;
}

给出编译错误:

gcc -o foo foo.c
foo.c: In function 'main':
foo.c:21: error: incompatible types in assignment

Compilation exited abnormally with code 1 at Sun Feb  1 20:05:37

您需要一个指针,它一个左值,用于分配结果。

例如这段代码:

int main() {
    int a[10];
    int * ip;

    /* a = arrayGen(a,9);  */
    ip = a ; /* or &a[0] */
    ip = arrayGen(ip,9);

    return 0;
}

编译良好:

gcc -o foo foo.c

Compilation finished at Sun Feb  1 20:09:28

请注意,由于顶部的标识,您可以根据需要将 ip 视为数组,如以下代码所示:

int main() {
    int a[10];
    int * ip;
    int ix ;

    /* a = arrayGen(a,9);  */
    ip = a ; /* or &a[0] */
    ip = arrayGen(ip,9);

    for(ix=0; ix < 9; ix++)
        ip[ix] = 42 ;

    return 0;
}

完整示例代码

为了完整起见,这是我的完整示例:

int gen(int max){
    return 42;
}

int* arrayGen(int arrAddr[], int maxNum)
{
    int counter=0;
    while(arrAddr[counter] != '\0') {
        arrAddr[counter] = gen(maxNum);
        counter++;
    }
    return arrAddr;
}

int main() {
    int a[10];
    int * ip;
    int ix ;

    /* a = arrayGen(a,9);  */
    ip = a ; /* or &a[0] */
    ip = arrayGen(ip,9);

    for(ix=0; ix < 9; ix++)
        ip[ix] = 42 ;

    return 0;
}

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

相关文章:

c++ - Qt QList<T> 转换和 node_copy

c - 在 C 中通过引用传递结构,但修改并非全部存在

c++ - %.*s 在 printf 上代表什么?

c++ - 如何将二维字符数组传递给c中的函数

python - 如何使用 pandas DataFrame 的值作为 numpy 数组索引

c++ - 在 C++ 中使用数组作为条件表达式是否有效?

python - 集成 C 和 Python : ValueError: module functions cannot set METH_CLASS or METH_STATIC

java - 使用 IntStream 创建数组的随机子集的快速方法

c - token 存储不当?文件解析问题

c++ - 如何在函数中将二维数组作为参数传递并在 C++ 中返回二维数组?