繁体   English   中英

当我更改数组中的变量时,为什么它不更新数组?

[英]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] varlist[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] - varlist[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM