【问题标题】:Array passing to functions differences数组传递给函数的区别
【发布时间】:2015-04-09 14:41:24
【问题描述】:

我想问一下这两种数组传递方式有没有区别:

unsigned char array[100];

function(array);

Where: 

library.cpp
uint8_t LibraryClass::function(unsigned char array[]) { }

library.h
uint8_t function(unsigned char array[]);

还有这个:

unsigned char array[100];

function(array);

Where: 

library.cpp
uint8_t LibraryClass::function(const unsigned char* array) { }

library.h
uint8_t function(const unsigned char* array);

我的问题是:

  • 这与方法有区别吗?

补充问题:

  • 我的 MCU 需要在方法 1 中而不是方法 2 中进行额外操作?
  • 方法2中多了一个const,为什么要用?使用指针时使用 const 是否安全?

【问题讨论】:

  • 通常,C 文件具有 .c 扩展名,而 C++ 文件通常具有 .cpp 扩展名。你确定你使用的是 C(语言不一样)?

标签: c++ c arrays function pointers


【解决方案1】:
  1. unsigned char array[] 只是函数声明中unsigned char *array 的语法糖。它们实际上是相同的。

  2. const 表示function 保证不修改array 的内容。第一个例子对调用者没有这样的保证。

【讨论】:

  • 值得一提的是,指针参数有3种不同的const:当指针本身是const时,指向的数据是const,或者两者都是const。函数签名所做的保证在所有 3 种情况下都不同。
  • 只有一个const,它可能适用于不同的事物。这种情况是我的回答中描述的。
【解决方案2】:

通常在 c/c++ 中 unsigned char array[]unsigned char* array,它由连续的内存组成。

当一个数组被传递给一个函数时,它被视为pointer(*),表示基地址。

提到 const- (const unsigned char* array) 表示它的值不会改变。

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多