C-尝试将指针作为参数传递给函数时出错,无法获取值

问题描述 投票:1回答:1

我无法成功地将指向的值显示为指向函数的指针作为参数。函数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;
}
c function pointers pass-by-value
1个回答
2
投票

calculatePrime在其本地堆栈上创建一个int数组prime。从此函数返回的指针pAr是此数组的地址。但是,函数返回后分配在堆栈上的数据状态应视为不确定的。也就是说,不能保证在退出calculatePrime之后,pAr引用的数据不会被破坏。

如果要创建数据并从函数返回指向它的指针,则需要使用malloc之类的函数动态分配适当的空间。

© www.soinside.com 2019 - 2024. All rights reserved.