我有以下功能:
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语句中的指针不同?
答案 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的地址。
您可以阅读变量声明/定义和标识符范围。