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

C - Error when trying to pass a pointer to a function as an argument, can't get value

提问人:HamzaKerem 提问时间:5/21/2020 最后编辑:Karl KnechtelHamzaKerem 更新时间:5/21/2020 访问量:123

问:

我无法将指向函数的指针作为参数传递,同时能够成功显示指向的值。函数 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 函数 指针 按值传递

评论

1赞 user3629249 5/21/2020
强烈建议将每行缩进 4 个空格,以便将所有代码都视为代码。由于声明消失了,请重新发布。#include
0赞 HamzaKerem 5/21/2020
将在第二位做
0赞 user3629249 5/21/2020
编译时,请始终启用警告,然后修复这些警告。( 用于 ,最低使用量:)注意:其他编译器使用不同的选项来生成相同的结果。gcc-Wall -Wextra -Wconversion -pedantic -std=gnu11
0赞 user3629249 5/21/2020
(编辑后)函数:已经在头文件中进行了原型设计:,因此不需要malloc()stdlib.h#include <malloc.h>
1赞 user3629249 5/21/2020
OT:为了便于阅读和理解:1)请始终如一地缩进代码:在每个左大括号“{”之后缩进。在每个右大括号“}”之前取消缩进。建议每个缩进级别为 4 个空格 2) 插入一个“合理”空格:在括号内、括号内、大括号内、逗号后、分号后、C 运算符周围。3)在代码块周围插入一个空行: 4)请遵循公理:每行只有一个语句,每个语句(最多)一个变量声明。forifelsewhiledo...whileswitchcasedefault

答:

2赞 Daniel Walker 5/21/2020 #1

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

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

评论

0赞 HamzaKerem 5/21/2020
我已为指针 pAr 分配了内存,如下所示:pAr = (int*)malloc(45 * sizeof(int));但是,我仍然无法让它正常工作
0赞 Daniel Walker 5/21/2020
你还在传给吗?&pArcheckIfPrime
0赞 HamzaKerem 5/21/2020
我是,我在调用函数calcualtePrime和checkIfPrime之前分配了它。
0赞 Daniel Walker 5/21/2020
但以 an 作为参数,但是一个 .checkIfPrimeint*&pArint**