【发布时间】:2019-09-26 20:52:33
【问题描述】:
我在 C 方面的知识不如我想象的那么好,但是谁能向我解释我在这里做错了什么?我正在使用使用 UARTS(微控制器上的异步接收器发送器)的德州仪器微控制器为嵌入式系统编写程序。我在构建项目时通常会包含 UART 库。
无论如何,这是我的问题:我有 4 个函数只向控制台打印一个字符串并且我的代码编译,但它给我的是警告而不是编译错误。
void foward(unsigned char *command) {
UARTPutString(UART_BASE, &command);
}
void reverse(unsigned char *command) {
UARTPutString(UART_BASE, &command);
}
void left(unsigned char *command) {
UARTPutString(UART_BASE, &command);
}
void right(unsigned char *command) {
UARTPutString(UART_BASE, &command);
}
我的问题主要与何时使用最简单的指针有关。我之所以使用 char* 命令的指针是因为导入的库是这样写的,但我不知道为什么我们必须使用 char 指针。你把什么作为第二个参数放在:
UARTPutString(UART_BASE, &command);
什么时候使用 & 或 * ?我知道指针指向某个东西的内存地址,但是当我需要使用 *、& 等作为函数的参数时,它不会点击我。
由于某种原因,此警告被提及 21 次:
Description Resource Path Location Type
#169-D argument of type "unsigned char **" is incompatible with parameter of type "unsigned char *" uartconsole.c /Command_Line_Interface line 82 C/C++ Problem
感谢您的帮助!
【问题讨论】:
-
为什么你认为你需要通过引用传递这个?这通常只在函数需要修改调用者的变量时使用。
-
如果函数只是将字符串写入UART,则不需要通过引用传递。
-
UARTPutString()函数的签名是什么?&command的类型是char **,因为command是char *。 -
请发布确切的错误信息。
-
C 不支持引用传递,只支持值传递。
标签: c pointers embedded pass-by-reference