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 <malloc.h>
OT:为了便于阅读和理解:1) 请一致地缩进代码:在每个左大括号“”后缩进。在每个右大括号 '' 之前取消缩进。建议每个缩进级别为 4 个空格 2) 插入一个“合理”空格:在括号内、括号内、大括号内、逗号后、分号后、C 运算符周围。 3)在代码块周围插入一个空行:for
if
else
while
do...while
switch
case
default
4)请遵循公理:每行只有一个语句和(最多)每条语句一个变量声明。
【参考方案1】:
calculatePrime
在其本地堆栈上创建一个int
数组prime
。此函数返回的指针pAr
是此数组的地址。但是,在函数返回后分配在堆栈上的数据的状态应该被认为是不确定的。也就是说,在calculatePrime
退出后,不能保证pAr
引用的数据不会被破坏。
如果要创建数据并从函数返回指向它的指针,则需要使用malloc
之类的函数动态分配适当的空间。
【讨论】:
我已经为指针 pAr 分配了内存: pAr = (int*)malloc(45 * sizeof(int));但是我仍然无法让它正常工作 你还在把&pAr
传递给checkIfPrime
吗?
我是,我在调用函数calcualtePrime和checkIfPrime btw之前分配了它。
但checkIfPrime
将int*
作为参数,但&pAr
是int**
。以上是关于C - 尝试将指向函数的指针作为参数传递时出错,无法获取值的主要内容,如果未能解决你的问题,请参考以下文章
E0312, C2664 尝试将矢量对象作为函数参数传递时出错