C++ 从函数返回数组或多个变量
我做错了什么?有人能解释为什么我的代码错了吗?C++ 从函数返回数组或多个变量,c++,arrays,function,arduino,arduino-ide,C++,Arrays,Function,Arduino,Arduino Ide,我做错了什么?有人能解释为什么我的代码错了吗? 为什么它不返回数组并修改其内容呢?我读过其他关于指针的文章,但我不明白它们是如何工作的。数组通过引用传递给函数。 如果修改函数中的数组,则这些更改将在函数调用后保持不变 int arrays[2] = {0,1}; void setup () { Serial.begin(9600); pinMode(2,INPUT); } void loop () { int buttonstate = digitalRead(2
为什么它不返回数组并修改其内容呢?我读过其他关于指针的文章,但我不明白它们是如何工作的。数组通过引用传递给函数。
如果修改函数中的数组,则这些更改将在函数调用后保持不变
int arrays[2] = {0,1};
void setup () {
Serial.begin(9600);
pinMode(2,INPUT);
}
void loop () {
int buttonstate = digitalRead(2); //reads I/O pin 2
if (buttonstate==HIGH) { //if I/O pin 2 is HIGH do following
arrays[] = function(arrays); //calls function "function"
Serial.println(arrays[0]); //prints out arrays[0]
Serial.println(arrays[1]); //prints out arrays[1]
}
}
int function (int arrays [2]) {
int holder = arrays[1]; //switches place the values on the array
arrays[1] = arrays[0];
arrays[0] = holder;
return arrays[]; //return the modified array
}
如果不想修改现有数组,则需要传递另一个数组
int arrays[2] = {0, 1};
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
int buttonstate = digitalRead(2); //reads I/O pin 2
if (buttonstate == HIGH) { //if I/O pin 2 is HIGH do following
function(arrays); //calls function "function"
Serial.println(arrays[0]); //prints out arrays[0]
Serial.println(arrays[1]); //prints out arrays[1]
}
}
void function(int arrays[]) {
int holder = arrays[1]; //switches place the values on the array
arrays[1] = arrays[0];
arrays[0] = holder;
}
您需要确保数组具有适当的大小,因为如果您在数组的范围外写入/读取,将不会引发任何显式错误,但您可能会发现一些难以调试的奇怪行为。好吧,你最大的误解是认为C允许你传递一个完整的数组作为参数或返回值 首先,你不能做像这样的作业
int arrays[2] = {0, 1};
int arrays2[3];
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
}
void loop() {
int buttonstate = digitalRead(2); //reads I/O pin 2
if (buttonstate == HIGH) { //if I/O pin 2 is HIGH do following
function(arrays, arrays2); //calls function "function"
Serial.println(arrays2[0]); //prints out arrays2[0]
Serial.println(arrays2[1]); //prints out arrays2[1]
Serial.println(arrays2[2]); //prints out arrays2[2]
}
}
void function(int arrays[], int arrays_return[]) {
arrays_return[0] = arrays[1];
arrays_return[1] = arrays[0];
arrays_return[2] = arrays[0] + arrays[1];
}
这是不正确的,因为无法将阵列作为一个整体引用。您可以返回对数组的引用,例如:
arrays[] = function(...);
函数始终返回指向整数的有效指针,并且始终将数组
变量声明为int*数组相反,代码>。但这还有另一个问题。。。指针不会为指向的值分配内存
最好的解决方案是使用数组引用将其传递给函数,然后使函数在数组上正确操作。喜欢
arrays = function(...);
当然,您可以返回对原始数组的引用,这在某些表达式中可能会有所帮助,但请始终记住,您处理的是同一个数组
void function(int arrays[])
{
int temporary = arrays[0];
arrays[0] = arrays[1];
arrays[1] = temporary;
/* no return as function is declared void */
}
您有一个声明为返回int
的函数,并且您认为您正在返回一个数组。恐怕这是最重要的错误。另外,arrays[]
不是有效的表达式,因为它不是引用数组的方式<代码>[]
仅用于访问元素,您必须在元素之间放置表达式。要返回数组(如果可能的话),您应该返回数组相反,代码>。
void function(int arrays[])
{
int temporary = arrays[0];
arrays[0] = arrays[1];
arrays[1] = temporary;
/* no return as function is declared void */
}
int *function(int *arrays) /* this parameter declaration is equivalent to the last one */
{
int temporary = arrays[0];
arrays[0] = arrays[1];
arrays[1] = temporary;
return arrays; /* reference to the first array element */
}