我一直在编写一个 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};
我是一名优秀的程序员,十分优秀!