我无法成功地将指向的值显示为指向函数的指针作为参数。函数checkIfPrime无法工作或接收指针pAr指向的值。抱歉,代码混乱。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <malloc.h>
int calculatePrime(){
int i = 0, j = 0, z = 0, check = 0;
int prime[100] = {2, 3, 5};
int size = 3, primeNum = 7;
int *pAr = prime;
while (i <= 100){
for (z = 0; z <= size - 1; z++){
if (primeNum % prime[z] != 0){
check++;
}
}
if (check == size){
prime[size] = primeNum;
size++;
}
i++;
primeNum += 2;
check = 0;
}
return pAr;
}
int checkIfPrime(int *pAr, int num){
int i, check = 0, isPrime = 0;
int fail = 0;
printf("\n\n");
printf("Doesn't works here, *(pAr + 5): %d", *(pAr + 5));
for(i = 0;i <= 45 && fail == 0; i++){
if (num % *(pAr + i) != 0){
check++;
}
else{
fail = 1;
}
}
if (check == 45){
isPrime = 1;
printf("\n%d is prime\n", i);
} else{
isPrime = 0;
printf("\n%d is not prime\n", i);
}
return isPrime;
}
int main(){
FILE *fp = NULL;
fp = fopen("test.txt", "r");
int i = 0, j = 0, k = 0;
int even[20], odd[20], prime[20];
int num, temp;
char str[20];
int isPrime;
int ar[45];
int *pAr;
pAr = calculatePrime();
printf("Works here, *(pAr + 5): %d\n", *(pAr + 5));
isPrime = checkIfPrime(&pAr, 7);
//Having issues here
return 0;
}
calculatePrime
在其本地堆栈上创建一个int
数组prime
。从此函数返回的指针pAr
是此数组的地址。但是,函数返回后分配在堆栈上的数据状态应视为不确定的。也就是说,不能保证在退出calculatePrime
之后,pAr
引用的数据不会被破坏。
如果要创建数据并从函数返回指向它的指针,则需要使用malloc
之类的函数动态分配适当的空间。