c++ - 应该是本地的变量正在发挥全局作用

标签 c++ variables scope

只是一个免责声明:这是一项家庭作业;我来这里是因为我的(在线)教学不是很灵敏。就是说,我想除了一个问题我已经想通了。

任务是计算以不同方式创建 3 个大小为 100000 的数组中的每一个 1000 个需要多长时间:静态、堆栈和堆。我很确定我有创建数组的正确代码。我遇到的问题是当我将 avgTime 打印到屏幕上时,每个函数输出完全相同的值。因此,如果第一个功能花费了 800 毫秒,那么接下来的两个功能将重复该时间。我认为这与 avgTime 变量的范围有关。有什么想法吗?

#include <iostream>
#include <windows.h>

using namespace std;

void fStaticArray() {
   int i = 0;
   DWORD avgTime;
   while (i<1000){
      DWORD before = GetTickCount();
      static int staticArray [100000];
      i++;
      DWORD after = GetTickCount();
      avgTime = avgTime + (after - before);
   }
   cout << "fStaticArray: " << (avgTime/1000) << "ms  ";
   //avgTime = 0;
}

void fStackArray() {
   int i = 0;
   DWORD avgTime;
   while (i < 1000) {
      DWORD before = GetTickCount();
      int stackArray [100000];
      i++;
      DWORD after = GetTickCount();
      avgTime = avgTime + (after - before);
   }
   cout << "fStackArray: " << (avgTime/1000) << "ms   ";
}

void fHeapArray() {
   int i = 0;
   DWORD avgTime;
   while (i < 1000) {
     DWORD before = GetTickCount();
     int * heapArray = new int[100000];
     i++;
     DWORD after = GetTickCount();
     avgTime = avgTime + (after - before);
   }
   cout << "fHeapArray: " << (avgTime/1000) << "ms   ";
}


int main(void) {
   fStaticArray();
   fStackArray();
   fHeapArray();
}

最佳答案

不存在作用域问题。有两件事可以使输出相同。首先,它们具有相同的值(value)。如果它们是并且您不相信,请尝试在所有循环中放置不同的 sleep 或让它们运行不同的数字,您会看到它们打印不同。其次,它们可能不同,但由于两个 int 的除法是 int 所以它们打印相同的值。尝试至少一个除法参数来 float 。在使用两者中的任何一个之前,只需尝试不除法打印 avgValue 。您也可能希望在 while 循环之前和之后放置 GetTickCount()。

关于c++ - 应该是本地的变量正在发挥全局作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319195/

相关文章:

xcode - 有没有办法在不使用 XCode 4 中的断点的情况下观察变量?

javascript - javascript中作用域和命名空间有什么区别

c++ - C++ 中的嵌套类

c++ - 创建返回结构数组的 API 函数

java - 是否有一个包可以实现非常大的高精度数字?

python - 如何在Python中通过函数传递变量

c++ - 如何通过 C 或 C++ API 获取 HDF5 数据集的名称?

c++ - 带有迭代器和自定义步长的循环结束条件

javascript - 尝试本地数据存储时键入错误,如何启动我的网站?

c++ - 为什么缺少/未声明 MonitorFromWindow? (C++/WinAPI)