Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组作为参数传递给C中的函数指针_C_Arrays_Function_Pointers_Arguments - Fatal编程技术网

将数组作为参数传递给C中的函数指针

将数组作为参数传递给C中的函数指针,c,arrays,function,pointers,arguments,C,Arrays,Function,Pointers,Arguments,我目前正在研究函数指针,并一直在练习排序数组函数。 关键是我在函数中输入一系列数字,程序将按升序重新排列。当我执行按值调用函数时,它工作得很好(我想这就是您如何调用它的)。但是,当我尝试将指针分配给函数并尝试使用该指针而不是函数本身时,它会返回一系列错误。我确信问题是由于我将数组作为参数传递给函数指针。这是我的密码: #include<stdio.h> #define SIZE 10 void sort(int a[], int size); void swap(int *elt1

我目前正在研究函数指针,并一直在练习排序数组函数。 关键是我在函数中输入一系列数字,程序将按升序重新排列。当我执行按值调用函数时,它工作得很好(我想这就是您如何调用它的)。但是,当我尝试将指针分配给函数并尝试使用该指针而不是函数本身时,它会返回一系列错误。我确信问题是由于我将数组作为参数传递给函数指针。这是我的密码:

#include<stdio.h>
#define SIZE 10

void sort(int a[], int size);
void swap(int *elt1, int *elt2);
main()
{
    int i; int array[SIZE]= {1,9,3,2,4,100,43,23,32,12};
    void (*fptr)(int array, int SIZE);
    fptr = &sort;
    (*fptr)(array,SIZE);
    /*sort(array, SIZE);*/
    for(i=0;i<SIZE;i++)
    {
            printf("%d\n", array[i]);
    }
    return 0;
}

void sort(int a[], int size)
{
    int pass, j;
    for(pass = 0; pass<size;pass++)
    {
            for(j=0;j<size;j++)
            {
                    if(a[j]>a[j+1])
                    {
                            swap(&a[j], &a[j+1]);
                    }
            }

    }


}


void swap(int *elt1, int *elt2)
{
    int hold;
    hold = *elt1;
    *elt1 = *elt2;
    *elt2 = hold;

}
#包括
#定义尺寸10
无效排序(int a[],int size);
无效掉期(int*elt1,int*elt2);
main()
{
int i;int数组[SIZE]={1,9,3,2,4100,43,23,32,12};
void(*fptr)(整数数组,整数大小);
fptr=&sort;
(*fptr)(阵列、大小);
/*排序(数组、大小)*/

对于(i=0;i函数的第一个参数是指向
int
(即
int*
)的指针,而不是
int

void (*fptr)(int array, int SIZE);
应该是

void (*fptr)(int *array, int SIZE);

void(*fptr)(int数组,int大小)
的类型似乎与
void排序(int a[],int大小)
@Jack的类型不尽相同,但它们是。@H2CO3和
int
以及指向
int
的指针?事实上,我指出了同样的问题,所以我不明白你的意思。@H2CO3帮助慢家伙(我)。当
int
int*
同义时(
intptr\t
not resisting=P)@H2CO3必须对其进行限定,或者我只知道您会将其带到表中=PH2CO3,谢谢,但它仍然不起作用。。下面是我得到的结果:sortpointeragain.c:9:错误:预期';','或')'before numeric constant sortpointeragain.c:10:error:'fptr'未声明(首次在此函数中使用)sortpointeragain.c:10:error:(每个未声明的标识符只报告一次sortpointeragain.c:10:error:对于它出现在其中的每个函数。)@user2059456:是否注意到此处的第二个参数:
void(*fptr(int-array,int-SIZE)
#define
同名?发生的情况是预处理器将其替换为
void(*fptr)(int-array,int-10)
这显然是不正确的。请使用其他名称。是的,我尝试将大小定义为10,并将其用作数组的大小。我将尝试使用其他名称。请稍后与Jack man联系。你说得对!!!但为什么我不能这样做呢?我将大小定义为10,这是一个int,指向函数的指针需要一个in所以应该没问题吧???哦,我明白了,指针期望的是一个整数类型的变量,而不仅仅是一个数字…我说的对吗?