一元“*”的类型参数无效

Invalid type argument of unary ‘*’

本文关键字:类型参数 无效 一元      更新时间:2023-10-16

我的Arduino C++代码有问题。以下是功能:

  void sendDeviceName(){
  char buffer[3] = "";
  incomingCommand.toCharArray(buffer, 3);
  int deviceNumber = atoi(*buffer[2]);
  Serial.println(EEPROMreadDevice(deviceNumber));
}

当我尝试编译时,我的代码编译器返回:

错误:一元"*"的类型参数无效

我试着自己修,但我不去。

buffer[2]char,而不是char *,因此不能取消引用它。

错误源于buffer[2]char,而不是指针。这里没有什么可取消引用的。如果您试图将代表数字的char转换为相应的int值,请使用:

int deviceNumber = buffer[2] - '0';

或者,如果您想要char数组的最后N-K个字符,通常使用:

int deviceNumber = atoi(buffer + K);

所以在你的情况下:

int deviceNumber = atoi(buffer + 2);

我试着自己修,但我不去。

表达式buffer[2]属于char类型。不能取消引用char。也许你的意思是…

buffer + 2

相当于

&buffer[2]

这将被编译,但作为atoi的参数,这是错误的:atoi需要一个以零结尾的字符串,该字符串至少包含一个数字,而指向buffer最后一个元素的指针最多可以是指向终止空字节(没有数字)的指针。

也许这就是你想要的:

atoi( buffer )

或者,如果你想要一个存储在索引2:的数字

buffer[2] - '0'

(C++保证小数位数的字符代码是连续的)。

或者,如果char值直接是您的整数值:

buffer[2]