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

Posted

技术标签:

【中文标题】C - 尝试将指向函数的指针作为参数传递时出错,无法获取值【英文标题】:C - Error when trying to pass a pointer to a function as an argument, can't get value 【发布时间】:2020-09-07 11:35:37 【问题描述】:

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

【问题讨论】:

强烈建议每行缩进4个空格,所有代码都被视为代码。由于#include 声明消失,请重新发布。 将在第二个完成 编译时,始终启用警告,然后修复这些警告。 (对于gcc,至少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11)注意:其他编译器使用不同的选项来产生相同的结果。 (编辑后)函数:malloc()已经在头文件中原型化:stdlib.h所以不需要#include &lt;malloc.h&gt; OT:为了便于阅读和理解:1) 请一致地缩进代码:在每个左大括号“”后缩进。在每个右大括号 '' 之前取消缩进。建议每个缩进级别为 4 个空格 2) 插入一个“合理”空格:在括号内、括号内、大括号内、逗号后、分号后、C 运算符周围。 3)在代码块周围插入一个空行:forifelsewhiledo...whileswitchcasedefault4)请遵循公理:每行只有一个语句和(最多)每条语句一个变量声明。 【参考方案1】:

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

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

【讨论】:

我已经为指针 pAr 分配了内存: pAr = (int*)malloc(45 * sizeof(int));但是我仍然无法让它正常工作 你还在把&amp;pAr传递给checkIfPrime吗? 我是,我在调用函数calcualtePrime和checkIfPrime btw之前分配了它。 checkIfPrimeint* 作为参数,但&amp;pArint**

以上是关于C - 尝试将指向函数的指针作为参数传递时出错,无法获取值的主要内容,如果未能解决你的问题,请参考以下文章

E0312, C2664 尝试将矢量对象作为函数参数传递时出错

将指向常量的指针作为参数传递时出现问题

如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?

将c ++引用的地址传递给指针

数组与指针

将参数与函数指针一起传递