为什么指针在foor循环中返回0

时间:2017-02-28 11:56:52

标签: 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循环cout打印0三次。为什么它会提供0而不是4?为什么取消引用for循环中的指针与if语句中的指针不同?

3 个答案:

答案 0 :(得分:4)

在此声明中

run

声明指针for(int i = 0; i < k-1; i++){ cout << "Run in for loop " << *run << endl; } 指向由零初始化的动态分配的内存。

它是循环中使用的变量

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

在if语句

中声明的另一个具有相同名称的指针
double min = results.OrderByDescending(x => x.Value).First().Key;

在if语句之外不存在。

答案 1 :(得分:0)

你声明int *运行两次,填充第二个并显示第一个。

答案 2 :(得分:0)

你有两个不同的变量!一个在函数块中定义,并初始化为包含0的地址,另一个在if的 then 块中定义,并且初始化为包含4的地址。

您可以阅读变量声明/定义和标识符范围。