2

我正在编写一个 C 函数,以便在调用时,该函数将返回前 p 个素数的数组(向量)(其中 p 从 main 中的键盘给出)。

我的问题是当我尝试在 main 中调用该函数时。

void vector_prime(int p, int *v[ ],int *total);

这就是我的函数头的样子,下面是来自 main 的调用。

vector_prime(n,&v,&tot);

现在,问题是当我尝试将参数 v 提供给函数时, v 已经是向量第一个元素的指针,因此尝试编写 &v 是行不通的。

[错误] 无法将参数 '2' 的 'int ( )[100]' 转换为 'int *' 到 'void vector_prime(int, int* , int )'

这是错误。

下面是整个代码。

如果你能帮助我,我将不胜感激。

#include<stdio.h>
#include<stdlib.h>

int prim(int n);
void vector_prime(int p, int *v[],int *total);


int main(void){

    int n,j;
    int v[100], tot;


        puts("Introduceti un numar intreg: ");
        scanf("%d",&n);

        if(prim(n)==1) printf("Numarul %d este prim", n);
                        else printf("Numarul %d nu este prim",n);


        vector_prime(n,&v,&tot);

        for(j=0;  j<tot;   j++) printf("%d ", v[j]);

}



int prim(int n){

    int i,k=0;


    for(i=2;  i<n/2;  i++){
        if(n%i==0)  k++;
    }

    if(k==0) return 1;
        else return 0;


}
//p - primele p numere prime;     
//*v[] - pointer catre vectorul in care va stoca valorile;
///*total - pointer catre locatia la care este stocat numarul de valori prime pana la p;
void vector_prime(int p, int *v[],int *total){

    int i,j=0,d,k;

    for(i=1;   i<p;   i++){
    k=0;
        for(d=2;  d<i/2+1;  d++)

            if(i%d==0) k++;

                if(k==0) {
                    *v[j]=i; (*total)++; j++;
                }

    }
//  for(j=0;  j<*total;  j++) printf("%d  ", *v[j]);


} 

谢谢!!

4

1 回答 1

1

这是因为你的vector_prime函数的第二个参数需要一个指针数组,然后你将一个指针传递给它。

此处无需传递指向数组的指针,只需按原样传递数组,并相应地修改vector_prime函数即可。

所以:

void vector_prime(int p, int v[], int *total);

或者

void vector_prime(int p, int *v, int *total);

vector_prime(n, v, &tot);

您应该注意,您的代码中也有一些未定义的行为:您没有初始化totin main,也没有初始化它vector_prime。这意味着它将包含一个看似随机的值。

您可能应该检查n不大于100或小于0。另请注意,您没有v[0]vector_prime函数中设置值。

于 2014-01-07T15:38:02.107 回答