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

Why pointer return 0 in foor loop

本文关键字:返回 循环 foor 指针 为什么      更新时间:2023-10-16

我具有以下功能:

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,而用于Loop Cout三次打印0。为什么它给出0而不是4?为什么将指针用于循环的指示与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语句之外没有还活着。

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

您有两个不同的变量!一个是在函数的块中定义的,并初始化为包含0的地址,另一个在然后定义的IF的块中定义,并initileiazed以地址为包含4。

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