何时在 c 中的函数参数中使用指针,UART 函数

when to use pointers in function arguments in c, UART function

我正在阅读微控制器上 uart 的一些示例代码。

在 uart 库的头文件中有以下函数定义。

然后在主程序中调用以下代码。

我的问题是为什么他们使用指针作为函数参数?

或者,下面的UART写函数声明不使用指针。

我只是想知道为什么以及何时使用指针。

非常感谢

在 main 函数中,BANNER 被转换为 uint8_t*,因为它是一个字符串文字,因此类型 const char[] 在以下情况下衰减为 const char*在表达式中使用或作为函数传递。 charuint8_t 是不同的类型,尽管它们的表示相同,只是对某些值的解释不同。

main 函数中还有另一个问题:您应该传递 strlen(BANNER) 而不是 sizeof(BANNER),以免在要传输的字节数中包含空终止符。

这是更正后的版本:

#define BANNER  "Hello, world!\n\n"

int main(void) {
    ti_uart_write_buffer(TI_UART_0, (const uint8_t *)BANNER, strlen(BANNER));
    return 0;
}

在函数描述中看到是multi-byte数据写入函数。因此,当你想写入多个字节时,你会发送一个指向该数据的指针。 另一方面,如果你只想写一个字节,使用只接受一个字节的函数,它是按值传递的。

简单地说,你必须使用一个指针,因为ti_uart_write_buffer发送的是一个数据数组。

出于性能原因,无法按值将数组传递给 C 函数。因为这样做会涉及制作数据的副本,这会浪费执行时间和内存。所以这是C语言本身做不到的。

相反,您可以传递指向数组第一个元素的指针。