何时在 c 中的函数参数中使用指针,UART 函数
when to use pointers in function arguments in c, UART function
我正在阅读微控制器上 uart 的一些示例代码。
在 uart 库的头文件中有以下函数定义。
然后在主程序中调用以下代码。
我的问题是为什么他们使用指针作为函数参数?
或者,下面的UART写函数声明不使用指针。
我只是想知道为什么以及何时使用指针。
非常感谢
在 main 函数中,BANNER
被转换为 uint8_t*
,因为它是一个字符串文字,因此类型 const char[]
在以下情况下衰减为 const char*
在表达式中使用或作为函数传递。 char
和 uint8_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语言本身做不到的。
相反,您可以传递指向数组第一个元素的指针。
我正在阅读微控制器上 uart 的一些示例代码。
在 uart 库的头文件中有以下函数定义。
然后在主程序中调用以下代码。
我的问题是为什么他们使用指针作为函数参数?
或者,下面的UART写函数声明不使用指针。
我只是想知道为什么以及何时使用指针。
非常感谢
在 main 函数中,BANNER
被转换为 uint8_t*
,因为它是一个字符串文字,因此类型 const char[]
在以下情况下衰减为 const char*
在表达式中使用或作为函数传递。 char
和 uint8_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语言本身做不到的。
相反,您可以传递指向数组第一个元素的指针。