代码:
/*
* 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");
}
我的编译器不赞同此代码。 - [警告]传递`printArray'的arg 1会在没有强制转换的情况下从指针生成整数 - printArray(array2,4); - [错误]下标值既不是数组也不是指针 - printf(“%d”,* iXArray [iCntr]);
我做错了什么,为什么?我该如何解决这个问题?
答案 0 :(得分:7)
试试这个:
void printArray(int **iXArray, int iSize) ...
在你的例子中,你提供了一个(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;
}
答案 1 :(得分:3)
您正在将一个指针数组传递给int:
void printArray(int *ixArray[], int iSize)
答案 2 :(得分:0)
关于“保持不变”。你是通过引用传递东西,所以不让它们被编辑的方法是使它们成为常量。根据您不想更改的部分,您有几个不同的选项。但是,这不会让您在中更改它们。它听起来像是你想要一个使用数组无法在C ++中获得的传值,除非你自己制作手册。
答案 3 :(得分:0)
这似乎无法通过printArray使array1可编辑。
/*
* 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");
}
答案 4 :(得分:0)
这也有效:
/*
* 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");
}
指针算术完美无缺。