我已经开始为Arduino学习C大约两周了。我有以下代码,我不明白如何从函数ReadLine中检索数据。另外我不明白变量BufferCount如何影响程序以及它的使用原因。我知道它拥有一年中的数字位数,但这就是我对这个变量的所有了解。
到目前为止,我所学到的功能包括:
我在这个程序中看到的让我觉得该函数也可以使用参数部分返回值。我一直以为函数只能返回与类型说明符相同类型(int,boolean ...)的值。
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.avaible() > 0) {
int bufferCount;
int year;
char myData[20];
bufferCount = ReadLine (myData);
year = atoi(myData); //convert string to int
Serial.print("Year: ");
Serial.print(year);
if (IsLeapYear(year)) {
Serial.print(" is ");
} else {
Serial.print(" is not ");
}
Serial.println("a leap year");
}
}
int IsLeapYear(int yr) {
if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0) {
return 1; //it's a leap year
} else {
return 0;
}
}
int ReadLine (char str[]) {
char c;
int index = 0;
while (true) {
if (Serial.available() > 0) {
c = Serial.read();
if (c != '\n') {
str[index++] = c;
} else {
str[index] = '\0'; //null termination character
break;
}
}
}
return index;
}
答案 0 :(得分:1)
你缺少的基本概念是指针。在像isLeapYear这样的函数的情况下,你对该参数是正确的。它只是调用函数时传入的任何变量的数据副本。
但是对于ReadLine,情况有所不同。 ReadLine正在获取一个指向char数组的指针。指针是一种特殊的变量,它保存另一个变量的内存地址。确实,在这种情况下,您将获得指针的本地副本,但它仍然指向内存中的相同位置。在函数期间,数据不会复制到变量str中,而是复制到它指向的内存位置。由于这是一个属于调用函数范围内变量的内存位置,因此该实际变量的值将被更改。你已经把它写在记忆中了。