将包含指针的数组正确传递给函数

Pie*_*ter 4 c

码:

/*
 * code.c
 */
#include <stdio.h>

void printArray(int iXArray, int iSize);

int main() {
    int array1[] = {7, 9, 3, 18};
    int *array2[] = {array1 + 0, array1 + 1, array1 + 2, array1 + 3};

    printArray(array2, 4);

    return 0;
}

// This should print the values in array1
void printArray(int iXArray, int iSize) {
    int iCntr;
    for (iCntr = 0; iCntr < iSize; iCntr++) {
        printf("%d ", *iXArray[iCntr]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

我的编译器不赞同此代码. - [警告]传递`printArray'的arg 1使得没有强制转换的指针产生整数 - printArray(array2,4); - [错误]下标值既不是数组也不是指针 - printf("%d",*iXArray [iCntr]);

我做错了什么,为什么?我该如何解决?

Yan*_*ton 8

试试这个:

void printArray(int **iXArray, int iSize) ...
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您提供了一个(int*)数组,因此将其作为一个引用,您必须告诉编译器期望一个指针数组.

默认情况下,通过引用传递数组.如果更改阵列的内容,它也会在被叫方的位置发生变化.指针本身是按值传递的,因此更改iXArray参数(iXArray = (int**)123;)的值不会改变array2被调用方指针.

如果要按值传递数组,则需要将其包装在值类型中:

typedef struct {
  int A[123];
} Array;

Array incrementArray(Array array, int count) {
    for (int i=0; i<count; i++) {
        array.A[i]++;
    }
    return array;
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 5

您正在传递一个指向 int 的指针数组:

void printArray(int *ixArray[], int iSize)
Run Code Online (Sandbox Code Playgroud)