【问题标题】:Why array values are different from assigned values C program为什么数组值不同于赋值C程序
【发布时间】:2019-04-07 12:36:34
【问题描述】:

我写了一个小代码,它接受一个包含 10 个值的数组,将数组传递给一个函数,该函数将每个值加倍。该数组在函数内打印预期值(双精度)。回到主函数,打印的输出在 for 循环中包含索引 1、2 和 3 的垃圾值,用于打印所有值。为什么这些值会改变?主函数和被调用函数的地址相同。

StructA doubleArray(int* alist, int b) {

    StructA doubled;
    int temp[b];
    for(int i=0; i < b; i++){
        temp[i] = 2 * alist[i];
    }
    doubled.a = temp;
    doubled.b = b;
    return doubled;
}

int main() {

    int arange[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int len = 10;
    StructA hasDoubledValues = doubleArray(arange, len);
    printf("\nvalues in main :");
    for(int k = 0; k < hasDoubledValues.b; k++){
        printf(" %d  \n", hasDoubledValues.a[k]);
    }
    return 0;
}

其打印值为:0 0 -14334592 32507 8 10 12 14 16 18 我希望这些值是:0 2 4 6 8 10 12 14 16 18

【问题讨论】:

  • @xing 谢谢。这工作正常

标签: c arrays


【解决方案1】:

int temp[b]; 是函数本地的。 从函数返回后,该内存的生命周期将停止,访问它会产生未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 2013-09-22
    • 2017-01-20
    • 1970-01-01
    • 2011-06-19
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多