码:
/*
* 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]);
我做错了什么,为什么?我该如何解决?
试试这个:
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)
您正在传递一个指向 int 的指针数组:
void printArray(int *ixArray[], int iSize)
Run Code Online (Sandbox Code Playgroud)