我一直在写一个C代码,它接受一个整数数组,并将数组中的每个值加1。然而,我有一个分割错误。
这是代码:
#include <stdio.h>
void add1(int a[]){
int i;
for(i=0;i<sizeof(a);i++){
a[i]=a[i]+1;
}
}
void main(){
int arr[10]={1,2,3,4,5,76,7,5,3};
add1(arr);
int i;
for(i=0;i<sizeof(arr);i++){
arr[i]=arr[i]+1;
printf("%d ",arr[i]);
}
}
我可以确定您的程序中的三个问题,并在严重程度的进展中列出它们
-
(代码错误)数组大小与数组对象的大小不同
for(i=0;i<sizeof(arr);i++)
您认为sizeof会返回数组大小(没有元素)的假设是错误的。sizeof用于计算数据类型的大小,在本例中,数据类型是大小为10的整数数组。
你应该做
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
这意味着数组对象的大小是单个数组元素的大小的倒数。
-
(函数错误)将数组传递给函数时,数组退化为指针。
void add1(int a[]){ int i; for(i=0;i<sizeof(a);i++){
因此,
sizeof
将返回整数指针的大小,而不是数组的大小。您应该将数组大小作为附加参数传递void add1(int a[], size_t sz){ int i; for(i=0;i < sz;i++){
-
(样式)初始化数组不需要显式的数组大小
int arr[10]={1,2,3,4,5,76,7,5,3};
应该是
int arr[]={1,2,3,4,5,76,7,5,3};