c++ - 为什么指针在for循环中返回0

标签 c++ pointers for-loop

我有以下功能:

void printKMax(int arr[], int n, int k){
    int* start = &arr[0];
    int* run = new int();
    if(n > 1){
        int* run = &arr[1];
        cout << "Initial run pointer " << *run << endl;
    }else {
        cout << *start << endl;
        return;
    }
    for(int i = 0; i < k-1; i++){
        cout << "Run in for loop " << *run << endl;
    }   
    delete run;
}

输入 arr = {3 4 6 3 4}k = 4。 首先 cout 打印 4,而 for loop cout 打印三次 0。为什么它给出 0 而不是 4?为什么在 for 循环中取消引用指针与在 if 语句中不同?

最佳答案

在这个声明中

int* run = new int();

有声明的指针 run 指向由零初始化的动态分配的内存。

循环中使用的变量

for(int i = 0; i < k-1; i++){
    cout << "Run in for loop " << *run << endl;
}   

if语句中声明的另一个同名指针

if(n > 1){
    int* run = &arr[1];

在 if 语句之外不存在。

关于c++ - 为什么指针在for循环中返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508169/

相关文章:

c++ - const 成员函数中指向 this 的非常量指针

c - 只用一个参数访问 c 多维数组?

javascript - 为什么使用 "for...in"进行数组迭代是个坏主意?

java - 数组不会通过 for 循环到达下一个位置

c++ - 带有用 C 编写的库的智能指针

c++ - 单元测试从不执行

c - C 中传递指针

python - double for,python 中的一些错误

c++ - 了解如何使用带指针作为参数的typedef void函数

c++ - Eclipse CDT 将 static_assert(cond) 突出显示为语法错误