C:将数组传递给函数并在接收函数中迭代
C: pass array to a function and iterate over in recipient function
我想将数组传递给 C 中的函数并循环访问它。我有这个代码:
#include <stdio.h>
int funct(int * a);
int main(int argc, char ** argv){
int a[5] = {0};
int b[5] = {1, 1};
printf("Size of cache: %d\n", sizeof(a));
printf("Array values:\n");
printf("Numb of elments in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
printf("Size of cache: %d\n", sizeof(b));
printf("Array values:\n");
printf("Numb of elments in a[]: %d\n", (sizeof(b) / sizeof(b[0])));
for(int i = 0; i < (sizeof(b) / sizeof(b[0])); i++){
printf("for loop\n");
printf("%d\n", b[i]);
}
printf("\n");
funct(a);
funct(b);
return 0;
}
int funct(int * a){
printf("Size of cache: %d\n", sizeof(a));
printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
printf("Array values:\n");
for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
printf("sizeof(a): %d\n",sizeof(a));
printf("sizeof(a[0]): %d\n",sizeof(a[0]));
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
return 0;
}
结果是:
Size of cache: 20
Array values:
Numb of elments in a[]: 5
for loop
0
for loop
0
for loop
0
for loop
0
for loop
0
Size of cache: 20
Array values:
Numb of elments in a[]: 5
for loop
1
for loop
1
for loop
0
for loop
0
for loop
0
Size of cache: 4
Numb of elements in a[]: 1
Array values:
sizeof(a): 4
sizeof(a[0]): 4
for loop
0
Size of cache: 4
Numb of elements in a[]: 1
Array values:
sizeof(a): 4
sizeof(a[0]): 4
for loop
1
请解释为什么我不能遍历函数内的数组 - 我做错了什么 (i) 以及如何正确处理它 (ii)。谢谢
sizeof(a)
将给出指针的大小而不是传递的数组,因为 a
是函数 funct
.
中的指针
因为 sizeof
运算符给你的是指针的大小,而不是数组中的元素数,你应该这样写你的函数
int funct(int * a, int count){
printf("Size of cache: %d\n", sizeof(a));
printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
printf("Array values:\n");
for(int i = 0; i < count; i++){
printf("sizeof(a): %d\n",sizeof(a));
printf("sizeof(a[0]): %d\n",sizeof(a[0]));
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
return 0;
}
然后在main()
函数中调用
funct(a, sizeof(a) / sizeof(a[0]));
funct(b, sizeof(b) / sizeof(b[0]));
您无法获得指针指向的元素的数量,因此唯一的方法是将其作为函数参数与数组一起传递。
另请注意,您没有正确初始化数组,在尝试打印数组元素时这将是未定义的行为。
函数原型为
int funct(int * a)
其中,a
为int *
。然后,当您从 main()
传递数组 a
时,它将 衰减 到 funct()
中的指针。所以,sizeof(a)
in funct()
只会给你指针的大小。
为了满足您的要求,您还必须传递 main()
的尺寸。
我想将数组传递给 C 中的函数并循环访问它。我有这个代码:
#include <stdio.h>
int funct(int * a);
int main(int argc, char ** argv){
int a[5] = {0};
int b[5] = {1, 1};
printf("Size of cache: %d\n", sizeof(a));
printf("Array values:\n");
printf("Numb of elments in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
printf("Size of cache: %d\n", sizeof(b));
printf("Array values:\n");
printf("Numb of elments in a[]: %d\n", (sizeof(b) / sizeof(b[0])));
for(int i = 0; i < (sizeof(b) / sizeof(b[0])); i++){
printf("for loop\n");
printf("%d\n", b[i]);
}
printf("\n");
funct(a);
funct(b);
return 0;
}
int funct(int * a){
printf("Size of cache: %d\n", sizeof(a));
printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
printf("Array values:\n");
for(int i = 0; i < (sizeof(a) / sizeof(a[0])); i++){
printf("sizeof(a): %d\n",sizeof(a));
printf("sizeof(a[0]): %d\n",sizeof(a[0]));
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
return 0;
}
结果是:
Size of cache: 20 Array values: Numb of elments in a[]: 5 for loop 0 for loop 0 for loop 0 for loop 0 for loop 0 Size of cache: 20 Array values: Numb of elments in a[]: 5 for loop 1 for loop 1 for loop 0 for loop 0 for loop 0 Size of cache: 4 Numb of elements in a[]: 1 Array values: sizeof(a): 4 sizeof(a[0]): 4 for loop 0 Size of cache: 4 Numb of elements in a[]: 1 Array values: sizeof(a): 4 sizeof(a[0]): 4 for loop 1
请解释为什么我不能遍历函数内的数组 - 我做错了什么 (i) 以及如何正确处理它 (ii)。谢谢
sizeof(a)
将给出指针的大小而不是传递的数组,因为 a
是函数 funct
.
因为 sizeof
运算符给你的是指针的大小,而不是数组中的元素数,你应该这样写你的函数
int funct(int * a, int count){
printf("Size of cache: %d\n", sizeof(a));
printf("Numb of elements in a[]: %d\n", (sizeof(a) / sizeof(a[0])));
printf("Array values:\n");
for(int i = 0; i < count; i++){
printf("sizeof(a): %d\n",sizeof(a));
printf("sizeof(a[0]): %d\n",sizeof(a[0]));
printf("for loop\n");
printf("%d\n", a[i]);
}
printf("\n");
return 0;
}
然后在main()
函数中调用
funct(a, sizeof(a) / sizeof(a[0]));
funct(b, sizeof(b) / sizeof(b[0]));
您无法获得指针指向的元素的数量,因此唯一的方法是将其作为函数参数与数组一起传递。
另请注意,您没有正确初始化数组,在尝试打印数组元素时这将是未定义的行为。
函数原型为
int funct(int * a)
其中,a
为int *
。然后,当您从 main()
传递数组 a
时,它将 衰减 到 funct()
中的指针。所以,sizeof(a)
in funct()
只会给你指针的大小。
为了满足您的要求,您还必须传递 main()
的尺寸。