在C中将指针传递给数组的正确方法是什么?

亚历山大·波宾斯基(AleksanderBobiński)

以这段代码为例:

#include <stdio.h>
void print_array(size_t size, unsigned (*myarray)[])
{
    printf("Array size: %lu\n", size);
    for (size_t i = 0; i < size; ++i)
            printf("%u ", (*myarray)[i]);
    printf("\n");
}
int main() {
    unsigned myarray[] = { 9, 8, 7, 6, 5 };
    print_array(sizeof(myarray) / sizeof(unsigned), &myarray);
    return 0;
}

使用clang分析器编译时(通过gcc 10.1.0),警告为:

src/main.c:7:3: warning: 2nd function call argument is an uninitialized value
            printf("%u ", (*myarray)[i]);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

输出为:

Array size: 5
9 8 7 6 5 

这段代码中的错误是什么?将指针传递到C中的数组的正确方法是什么?

伦丁

这似乎是错误的肯定。代码没有问题-尽管样式有点奇怪,但它们都是有效的C。

如果该备注是关于实际缺少初始化的,则可能与该工具未检查调用方有关。但是,即使分析器仅考虑本地转换单元,也无法将传递的变量默认为未初始化。那将是一个非常奇怪的假设。

可能是分析器感到不安,您实际上是将a传递给unsigned (*myarray)[5]了一个期望的函数unsigned (*myarray)[](指向不完整类型的指针,未指定大小的数组)。您可以尝试将参数更改为,以unsigned (*myarray)[size])查看它是否使该工具更快乐。

编辑:数组指针类型虽然兼容,所以该工具也不应该因为这个原因而抱怨。根据C17 6.7.6.2/6,一种或两种数组类型可以忽略大小说明符,并且仍然兼容:

对于两个兼容的数组类型,它们都应具有兼容的元素类型,并且如果两个大小说明符都存在且为整数常量表达式,则两个大小说明符均应具有相同的常量值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数组传递给函数的最正确方法是什么?

来自分类Dev

在Rust中声明可以传递给期望指针的C代码的结构或只是变量的正确方法是什么?

来自分类Dev

将指针作为参数传递给函数的正确方法是什么?

来自分类Dev

如何在C中将指针传递给多维数组?

来自分类Dev

将引用传递给道具的正确方法是什么?

来自分类Dev

将ThreadFunction传递给CreateThread API的正确方法是什么

来自分类Dev

C ++将方法的指针数组作为参数传递给方法

来自分类Dev

使用重定向传递对象数组的正确方法是什么?

来自分类Dev

为什么不能在C ++中将指针数组作为指针数组传递?

来自分类Dev

使用结构指针和C接口的“正确”方法是什么?

来自分类Dev

传递指针的正确方法?C ++

来自分类Dev

在Objective-C中将对象传递给另一个类的最佳方法是什么?

来自分类Dev

C ++将指针数组传递给函数

来自分类Dev

将this指针传递给另一个函数的安全方法是什么?

来自分类Dev

在Android中将信息传递给异步方法的最佳方法是什么?

来自分类Dev

在Three.js中将数组传递给着色器的正确方法

来自分类Dev

在Three.js中将数组传递给着色器的正确方法

来自分类Dev

将属性名称隐式传递给对象方法的正确方法是什么?

来自分类Dev

将“ this”传递给新对象的内联重写方法的正确方法是什么?

来自分类Dev

指向固定大小数组的指针数组的正确 c 语法是什么?

来自分类Dev

将命名函数传递给Javascript高阶函数的正确方法是什么?

来自分类Dev

将参数传递给回调函数的正确方法是什么?

来自分类Dev

将变量传递给 python/pyqt 中的类的正确方法是什么?

来自分类Dev

可以在C编程中将指针传递给scanf参数吗?

来自分类Dev

如何在C中将指针传递给函数

来自分类Dev

在VBA中将单元格作为UDF中的参数传递的正确方法是什么?

来自分类Dev

在SwiftUI中将数据传递到ViewBuilder闭包中的正确方法是什么?

来自分类Dev

将指向数组的指针传递给函数有什么好处?

来自分类Dev

为什么在Java数组中将此非法传递给构造函数的方法?

Related 相关文章

  1. 1

    将数组传递给函数的最正确方法是什么?

  2. 2

    在Rust中声明可以传递给期望指针的C代码的结构或只是变量的正确方法是什么?

  3. 3

    将指针作为参数传递给函数的正确方法是什么?

  4. 4

    如何在C中将指针传递给多维数组?

  5. 5

    将引用传递给道具的正确方法是什么?

  6. 6

    将ThreadFunction传递给CreateThread API的正确方法是什么

  7. 7

    C ++将方法的指针数组作为参数传递给方法

  8. 8

    使用重定向传递对象数组的正确方法是什么?

  9. 9

    为什么不能在C ++中将指针数组作为指针数组传递?

  10. 10

    使用结构指针和C接口的“正确”方法是什么?

  11. 11

    传递指针的正确方法?C ++

  12. 12

    在Objective-C中将对象传递给另一个类的最佳方法是什么?

  13. 13

    C ++将指针数组传递给函数

  14. 14

    将this指针传递给另一个函数的安全方法是什么?

  15. 15

    在Android中将信息传递给异步方法的最佳方法是什么?

  16. 16

    在Three.js中将数组传递给着色器的正确方法

  17. 17

    在Three.js中将数组传递给着色器的正确方法

  18. 18

    将属性名称隐式传递给对象方法的正确方法是什么?

  19. 19

    将“ this”传递给新对象的内联重写方法的正确方法是什么?

  20. 20

    指向固定大小数组的指针数组的正确 c 语法是什么?

  21. 21

    将命名函数传递给Javascript高阶函数的正确方法是什么?

  22. 22

    将参数传递给回调函数的正确方法是什么?

  23. 23

    将变量传递给 python/pyqt 中的类的正确方法是什么?

  24. 24

    可以在C编程中将指针传递给scanf参数吗?

  25. 25

    如何在C中将指针传递给函数

  26. 26

    在VBA中将单元格作为UDF中的参数传递的正确方法是什么?

  27. 27

    在SwiftUI中将数据传递到ViewBuilder闭包中的正确方法是什么?

  28. 28

    将指向数组的指针传递给函数有什么好处?

  29. 29

    为什么在Java数组中将此非法传递给构造函数的方法?

热门标签

归档