[英]Why does the array length change when an array that contains a pointer is a parameter of a method?
[英]When I change the variable that is in an array, why does it not update the array?
本质上我的问题是,在 C 和 C++ 中,如果我更新我之前放置在数组中的变量,为什么它不更新数组?
前任:
int var = 0;
int list[1];
list[0] = var;
var = 1;
printf("%i", list[0]);
我不明白为什么它打印0
而不是1
。
变量var
相对于数组list
是一个单独的 object
int var = 0;
int list[1];
它们占据memory的不同范围。
在本次作业中
list[0] = var;
变量var
的值的副本分配给另一个 object list[0]
。 var
和list[0]
之间没有任何关系。
您可以声明一个指针数组,例如
#include <stdio.h>
int main( void )
{
int var = 0;
int * list[1];
list[0] = &var;
var = 1;
printf( "*list[0] = %d\n", *list[0] );
}
程序 output 是
*list[0] = 1
在这种情况下,指针list[0]
指向变量var
。 所以使用指针可以 output 变量var
的当前值。
请注意,即使在 C++ 中,您也可能不会声明引用数组。 与上面显示的带有指针的方法类似,您可以声明一个类型为std::reference_wrapper
的对象数组,例如
#include <iostream>
#include <functional>
int main()
{
int var = 0;
std::reference_wrapper<int> list[1] = { var };
var = 1;
std::cout << "list[0] = " << list[0].get() << '\n';
}
程序 output 是
list[0] = 1
list[0] = var;
将var
中的值复制到list[0]
- var
和list[0]
是两个独立的int
。
如果您希望通过另一个变量看到对一个变量的更改,则需要使用指针或引用。 例子:
int main() {
int var = 0;
int* list[1]; // an array of pointers to `int`
list[0] = &var; // list[0] now points at `var`
var = 1;
printf("%i\n", *list[0]); // dereferencing list[0] to get the value in `var`
}
Output:
1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.