C语言 返回错误“指针来自没有强制转换的整数”

gijlo24d  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(120)

运行代码时:

#include<stdio.h>
void insert(int len,int ele,int pos, int ar[]){
    int x= pos,i;
    for (i=0;i<len;i++){
        ar[pos+1]=ar[pos];
        pos++;
    }
    ar[x]=ele;
    for (i=0;i<len+1;i++){
        printf("%d",ar[i]);
    }

}
int main(){
    int len,pos,ele,i;
    int ar[len];
    printf("Enter length of array");
    scanf("%d",&len);
    for( i=0;i<len;i++){
        printf("Enter element ");
        scanf("%d",&ar[i]);
    }
    printf("Enter element to insert ");
    scanf("%d",&ele);
    printf("Enter position  ");
    scanf("%d",&pos);
    insert(len,ele,pos,ar[len]);
}

我收到这个错误:

test.c: In function 'main':
test.c:26:5: warning: passing argument 3 of 'insert' makes pointer from integer without a cast [enabled by default]
     insert(ele,pos,ar[5]);
     ^
test.c:2:6: note: expected 'int *' but argument is of type 'int'
 void insert(int ele,int pos, int ar[5]){

我是一个初学编程的人,正在为大学课程学习C。我试图理解这个错误,但我做不到。任何帮助将不胜感激。

vlf7wbxs

vlf7wbxs1#

int ar[len];

是一种 * 声明 * int数组的方法。它为数组指定的名称是ar,所以当你想 * 引用 * 该数组本身时,只需使用ar
如果在一个表达式中,你说ar[len],它指定了数组ar中索引len处的int--在这种情况下,恰好超出了数组的范围,所以代码是双重错误的。
因此,在这里:

insert(len,ele,pos,ar[len]);

你是说

insert(len,ele,pos,ar);

,或者,等价地,

insert(len,ele,pos,&ar[0]);
uplii1fm

uplii1fm2#

insert函数期望ar参数是指向int的指针。通过传递一个int数组的元素,你只传递了一个int
这是一个警告而不是错误,因为指针是数值类型,所以你可以这样做,但你不应该这样做。您刚刚传递了一个无效指针。然后,你的函数会尝试用下面的语句引用那个 (不是真正的) 指针:

ar[pos + 1] = ar[pos];

记住ar[pos]等价于*(ar + pos)
这会引发可怕的未定义行为。
你应该只是把ar传递给insert。数组衰减为指向其第一个元素的指针。

insert(len, ele, pos, ar);

还要注意的是,C(和许多其他语言)的数组索引从0开始,所以对于长度为len的数组arr,数组中的最后一个有效元素是arr[len-1]

相关问题