我正在编写一个 C 函数,以便在调用时,该函数将返回第一个 p 素数的数组(向量)(在 main 中从键盘给出 p)。
我的问题是当我尝试在 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]);
}
谢谢!!
这是因为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);
您应该注意,代码中也有一些未定义的行为:您不会在 main
中初始化tot
,也不会在vector_prime
中初始化它。这意味着它将包含一个看似随机的值。
您可能应该检查n
是否大于100
或小于0
。另请注意,您不会在vector_prime
函数中将v[0]
设置为值。