I am writing a C function so that when called, the function would return an array (vector) of the first p prime numbers(with p given from the keyboard in main).
My problem is when I try to call the function in main.
void vector_prime(int p, int *v[ ],int *total);
This is how my function header looks like, and below is the calling from main.
vector_prime(n,&v,&tot);
Now, the problem is that when I try to give the argument v to the function, v is already a poiner to the first element of the vector, so that trying to write &v is not going to work.
[Error] cannot convert 'int ()[100]' to 'int*' for argument '2' to 'void vector_prime(int, int*, int)'
Here is the error.
Below is the entire code.
If you could help me I would be very grateful.
#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]);
}
Thanks!!
It's because the second argument of your
vector_prime
function takes an array of pointers, and you pass it a pointer to an array.There is no need to pass a pointer to the array here, just pass the array as it is, and modify the
vector_prime
function accordingly.So:
or
and
You should note that you have some undefined behavior in your code as well: You don't initialize the
tot
inmain
, and you don't initialize it invector_prime
either. That means it will contain a seemingly random value to start with.You should probably check that
n
is not larger than100
, or smaller than0
. And also note that you don't setv[0]
to a value in thevector_prime
function.