首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我没有动态声明数组时,display()如何显示数组值

当我没有动态声明数组时,display()如何显示数组值
EN

Stack Overflow用户
提问于 2019-06-19 01:32:14
回答 1查看 38关注 0票数 -2

据我所知,在c++中调用一个函数后,它的内存被释放给另一个变量。如果它没有分配给另一个变量,那么变量应该动态地分配内存。

代码语言:javascript
复制
#include<iostream>
using namespace std;
void init_values(int arr[]){
    for(int i=0;i<100;i++){
        arr[i]=i;
    }
}
void display(int arr[]){
    for(int i=0;i<100;i++){
        cout<<arr[i] << " ";
    }
}
int main(){
    int arr[100];
    init_values(arr);
    display(arr);
}

我原以为函数会显示垃圾信息,否则会显示错误。但它正确显示了这些值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 05:14:11

代码语言:javascript
复制
void init_values(int arr[]){
    for(int i=0;i<100;i++){ // i is created here
        arr[i]=i;
    } // i goes out of scope here
}

这里没有问题,以后也不会尝试使用i

代码语言:javascript
复制
void display(int arr[]){
    for(int i=0;i<100;i++){ // i is created here
        cout<<arr[i] << " ";
    } // i goes out of scope here

再说一次,没问题。

代码语言:javascript
复制
int main(){
    int arr[100]; // arr is created here
    init_values(arr);
    display(arr);
} // arr goes out of scope here

当我们调用init_valuesdisplay时,arr仍然在作用域中,因为它的生命周期在创建它的作用域的末尾结束。所以在这些函数调用期间,它仍然在作用域内。

现在,这将是一个问题:

代码语言:javascript
复制
int *init_values(void){
    int arr[100];
    for(int i=0;i<100;i++){
        arr[i]=i;
    }
    return arr;
}

为什么?想想看:

代码语言:javascript
复制
int *init_values(void){
    int arr[100]; // arr is created here
    for(int i=0;i<100;i++){
        arr[i]=i;
    }
    return arr;
} // arr goes out of scope here

所以init_values的调用者会收到一个指向arr的内容的指针,即使在我们退出这个函数后arr不存在。这个函数的返回值不能被安全地使用。你的代码不会这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56654296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档