我没有给我任何错误吗?不,在这种情况下编译器不会产生任何错误,因为您只是传递元素值的数量这超过了数组元素, 但如果name()
函数尝试访问越界元素然后导致未定义的行为。例如
void name(int[], int);
int main() {
int arr[] = {1,2,3};
name(arr, 5);
getch();
return 0;
}
void name(int a[], int i) {
printf("%d", i); /* printing variable i value is fine */
for(int row = 0; row < i; row++) {
printf("%d\n",a[row]);/* it cause UB when access a[3],a[4].. */
}
正确的过程是找到数组中元素的编号,存储到一个变量中并将该变量传递给函数,而不是某个随机数。例如
#include <stdio.h>
#include <stdio.h>
#include <conio.h>
void name(int[], int);
int main() {
int arr[] = {1,2,3},ele;
ele = sizeof(arr)/sizeof(arr[0]);
name(arr, ele);
getch();
return 0;
}
void name(int a[], int ele) {
printf("no of element in array : %d\n", ele);
for(int row =0; row<ele; row++) {
printf("%d\n",a[row]);
}
}