C 在函数中返回数组

2024-05-07

我对 C 比较陌生,我习惯用 Java 编程,所以我发现 C 在涉及数组的方面有点困难。我仍然对这些案例感到困惑:

int a [];
int* a;
int *a;

在java中,我会做这样的事情来在函数中返回一个数组:

int [] returnArr(int [] a){
... modify a ...
return a;
}

int [] a = {...};
int [] b = returnArr(a); ##

我怎样才能在C中做同样的事情,特别是带有##的部分。

编辑: 我有这个功能:

float *normalizeValues(float *v, float maxY){

    int size = sizeof(v) / sizeof(float);
    float max = findMax(v);
    float ratio = maxY / max;
    int i;
    for(i = 0; i < size ; ++i){
        v[i] = v[i] * ratio;
    }
    return v;
}

我正在执行以下操作:

float vert [] = {306, 319, 360, 357, 375, 374, 387, 391, 391, 70, 82, 94, 91, 108, 114, 125, 127, 131};
int i = 0;
float *vert2;
vert2 = normalizeValues(vert, 0.7);

for(i = 0; i < sizeof(vert2) / sizeof(float); ++i){
    fprintf(stdout,": %f\n",vert2[i]);
}

并且输出只有 1 个元素。


编辑:要直接回答您更新的问题:您必须传入数组的大小。 C 没有像 Java 那样存储数组大小的机制。如果编译器知道数组的大小,因为数组是全局或局部变量,而不是动态分配的,那么您可以使用 sizeof() 运算符。否则,您必须单独知道大小,或者在数组中使用标记值(例如末尾的 0.0 或 NULL)。

至于一般的数组、指针和参数,请参见下文:

您将返回一个指向数组的指针,该指针用“*”语法指示:

int *returnArr(int[] a) {
    // modify a...
    return a;
}

int a[] = { ... };
int *b;
b = returnArr(a);

有几点需要注意:

  • 您不能在涉及非常量表达式(例如函数调用)的变量声明中进行赋值。不过,这在 C99 中可能有所改变。
  • 括号去after变量名,与 Java 不同,在 Java 中它们是类型的一部分。尽管 Java 的语法更加一致,但在 C 中却不太有意义,在 C 中,您经常在变量声明的括号中给出数组大小:

    int a[3] = { ... };

  • 无法指定函数返回数组而不是普通指针。在 C 中,数组引用衰减为指针(尽管指针和数组不是同一件事,正如人们通常所说的那样)。这意味着无论何时传递数组,C 都只提供一种传递数组指针的方法。实际上并没有复制整个数组。碰巧的是,数组的名称也是指向数组第一个元素的指针。

另请注意 user268396 在他们的回答中所说的内容。如果您打算创建一个新数组并返回它,则需要动态分配该数组,或者传入一个指向已分配数组的指针(这似乎是您正在做的事情) 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 在函数中返回数组 的相关文章

  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何生成多值 INSERT 的 postgresql 转储而不是 COPY 并将插入批处理到显式事务中?

    我在任何地方都找不到关于如何在通过生成数据库转储时将插入批量化为每事务 100 个插入的批次的任何信息pg dump公用事业 我究竟需要如何执行它 我没有找到任何参数 gt man pg dump 来执行此操作 即使是最精致的answer
  • 填充 MultiIndex Pandas Dataframe 中的日期空白

    我想修改 pandas MultiIndex DataFrame 以便每个索引组都包含指定范围内的日期 我希望每个组都用值 0 或NaN Group A Group B Date Value loc a group a 2013 06 11
  • 仅在 PHPUnit 中需要时才执行 dataProviders?

    我的测试套件即使只是开始也需要几分钟 这是因为数据提供者在 phpunit 启动时立即执行 并且它们的所有数据 数千个对象 都保存在内存中 有没有办法在测试运行之前调用 dataProviders 我不在乎在屏幕上看到如此精确的进展 Tha
  • MongoDB 未找到合适的服务器

    我在连接到副本集时遇到问题 MongoDB Driver Exception ConnectionTimeoutException No suitable servers found serverSelectionTryOnce set S
  • React 中模型更改 11 次后 Froala 编辑器崩溃

    我在没有身份的情况下在线构建了一个简单的编辑器 在后端实现Node JS 与 Socket IO MongoDB 以及客户端使用React连接Socket IO 为了创建编辑器 我使用了弗罗拉编辑 https www froala com
  • 在网页中显示 Google 工作表单元格的内容

    我有一个包含 html 代码的单元格的 google 工作表 我想知道在网页中显示此 html 的最佳方式 我尝试过谷歌电子表格 API 和谷歌可视化 API 以下是如何使用 Javascript 图表 API 显示单个单元格中的信息 也许
  • 用更有意义的文本替换 GCC 输出中的 a-hats [重复]

    这个问题在这里已经有答案了 可能的重复 为什么 gcc 的所有错误消息中都有 https stackoverflow com questions 547071 why does gcc have a in all its error mes
  • const_iterator 和 iterator 有什么区别? [复制]

    这个问题在这里已经有答案了 这两者在 STL 内部的实现方面有什么区别 性能方面有什么区别 我想当我们以 只读方式 遍历向量时 我们更喜欢const iterator right 谢谢 没有性能差异 A const iterator是一个指
  • 在 C 中使用 fgets 和 strcmp [重复]

    这个问题在这里已经有答案了 我试图从用户那里获取字符串输入 然后根据他们输入的输入运行不同的函数 例如 假设我问 你最喜欢的水果是什么 我希望程序根据他们输入的内容进行评论 我不知道该怎么做 这是我到目前为止所拥有的 include
  • 不支持使用微风在同一查询中执行选择和扩展

    我使用 Durandal breeze 开发了一个 asp net 解决方案 这是我获取所有托运人的代码 var query EntityQuery from Shippers select id name street city retu
  • 在 Spring MVC 中使用一系列项目处理表单发布

    我正在尝试将一些数据从客户端发送到服务器 并将其处理为文件下载 我使用简单的 HTML 表单 因为我想初始化文件下载 而不是 AJAX 其中一个表单字段是一组项目 另外两个是名称和描述字符串 在提交表单之前 我将此字段序列化为字符串 JSO
  • Spark SQL / PySpark 中的逆透视

    我手头有一个问题陈述 其中我想在 Spark SQL PySpark 中取消透视表 我已经浏览了文档 我可以看到仅支持pivot 但到目前为止还不支持取消透视 有什么方法可以实现这个目标吗 让我的初始表如下所示 When I pivotPy
  • Windows.Automation 中的旧版 IAccessible

    如何使用C 获取AutomationElement的LegacyIAccessible State和其他LegacyIAccessibles 就像工具中的 Inspect exe 一样 The LegacyIAccessible是新的 并且
  • 如何编写凯撒密码 Python

    我不知道如何开始编写程序 input input Input the text you would like encrypted def cipher text letter code for i in input number code
  • 将 XML 反序列化为对象数组

    我正在尝试将 XML 文件反序列化为对象数组 但收到空对象 我的问题看起来与此类似 如何将 xml 反序列化为对象数组 https stackoverflow com questions 7541899 how to deserialize
  • 分布式设置中的 Django SECRET_KEY

    如果我在负载均衡器后面设置多个 django 服务器 我希望 SECRET KEY 相同 不同还是有关系 该文档对于这个值的具体用途有点薄弱 我想一定是一样的 这是相关问题 Django SECRET KEY https stackover
  • 使用 php 在没有“manage_pages”权限的情况下发布到 Facebook 页面

    我有一个包含博客文章的网站 我们需要自动将博客发布到 Facebook 页面 目前我可以发布到我的时间线 但我无法发布到 Facebook 页面 我在谷歌搜索过 许多代码说我们需要manage pages权限 我的应用程序 Facebook
  • 如何使用 Prometheus Alert Manager 在 Kubernetes 中触发警报

    我在集群中设置了 kube prometheus https github com coreos prometheus operator tree master contrib kube prometheus https github co
  • == 在 R 中,精度为 .Machine$double.eps [重复]

    这个问题在这里已经有答案了 在 R 中 我发现必须转换易于阅读的代码有点烦人 例如 if det A 1 not always working because of floating point precision to if abs de
  • C 在函数中返回数组

    我对 C 比较陌生 我习惯用 Java 编程 所以我发现 C 在涉及数组的方面有点困难 我仍然对这些案例感到困惑 int a int a int a 在java中 我会做这样的事情来在函数中返回一个数组 int returnArr int