当前位置: 首页 > 知识库问答 >
问题:

返回void*函数中的float

林意蕴
2023-03-14

我正在学习指针是如何工作的,但我不明白这段代码中的一件事。在void*函数中返回int就像一个咒语,但是返回float就不是了。

#include <stdio.h>

void* square (const void* num);

int main() {
  int x, sq_int;
  x = 6;
  sq_int = square(&x);
  printf("%d squared is %d\n", x, sq_int);

  return 0;
}

void* square (const void *num) {
  int result;
  result = (*(int *)num) * (*(int *)num);
  return result;
}
#include <stdio.h>

void* square (const void* num);

int main() {
  float x, sq_int;
  x = 6;
  sq_int = square(&x);
  printf("%f squared is %f\n", x, sq_int);

  return 0;
}

void* square (const void *num) {
  float result;
  result = (*(float *)num) * (*(float *)num);
  return result;
}

共有1个答案

那昊
2023-03-14

这两个函数都调用了未定义的行为,因为return语句中的返回类型和表达式的类型不匹配。

关于为什么它似乎起作用,阅读关于未定义行为。

也就是说,打开编译器警告,将所有警告都视为错误,这样,代码甚至不应该编译生成二进制文件,因为它包含一个约束冲突,而该约束冲突应该生成一个诊断(警告)。

    null
 类似资料:
  • 我在玩C语言中的函数指针只是为了学习。我尝试调用一个空函数,并将其结果设置为int。 我从中得到的结果是: 在对它进行了一点研究之后,我意识到main正在函数()中打印printf语句中的字符数。为什么会这样?这是预期产出吗?

  • C和C中有没有办法让返回void的函数按照未指定的顺序求值? 我知道函数参数是按未指定的顺序计算的,因此对于不返回void的函数,这可用于以未指定的顺序计算这些函数: 合格编译器编译的合法C和C代码可以按任何顺序打印< code>hi 、< code>bye和< code>moo。这并不是未定义的行为(鼻魔是无效的),有效的输出不止一个,但不一定是无限的,一个兼容的编译器甚至不需要确定它产生了什么

  • 问题内容: 我是一名编程初学者,对函数的返回值有疑问。 我正在学习Java。 我已经附上了我的书中具有经典选择排序功能的代码。 现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础: int [] a = new int [] {1,9,2,8,3,7,4,6​​,5}; 排序(a); if(ascending(a))System.out.println(“ Works”

  • 问题内容: 我有一个返回类对象或nil的函数。该功能的目的是检查是否存在。聊天ID存储在MySQL中。如果ID存在,则执行Firebase引用以获取快照,然后获取对象。如果ID不存在,则返回nil: 但是,在我得到 void函数中非预期的非无效返回值。 关于我可能会想念的任何想法? 问题答案: 问题是您试图从一个封闭内部返回一个非空值,该值仅从封闭内部返回,但是由于该封闭期望一个空返回值,因此您会

  • 问题内容: 我创建了一个从API获取URL并返回URL字符串作为结果的函数。但是,Xcode给我此错误消息: void函数中非预期的非无效返回值 有谁知道为什么会这样吗? 问题答案: 使用闭包而不是返回值:

  • 问题内容: 我刚刚开始学习面向对象,并且已经开始编写一个用户类,该类具有一种计算用户到对象的距离的方法。看起来像这样: 在上面标记的行上,出现以下错误: 我在其他地方寻找解决方案,但似乎找不到适用于此实例的任何东西。我在其他地方使用过distanceFromLocation代码,效果还不错,所以我不确定在这种情况下用法有什么不同。 谢谢你的帮助! 问题答案: 您在方法标头中缺少返回类型。 看来我的