我编写了以下C代码:
#include <stdio.h>
#include <stdlib.h>
int *getPointer(int var);
void anotherFunction();
int main ( int argc , char * argv [])
{
int *intPtr = getPointer(3);
printf("%d\n",*intPtr);
anotherFunction();
printf ("%d\n",*intPtr);
getPointer(5);
printf("%d\n", *intPtr);
return EXIT_SUCCESS ;
}
// Which problem occurs here?
int *getPointer(int var) {
int *ptr=&var;
return ptr;
}
void anotherFunction(){
// do nothing
int a [ 5 ] = { 4 , 5 , 6 , 7 , 8 };
}
输出为:
3
7
5
我不明白为什么intPtr的值在第二个printf()调用中发生变化。多谢您的协助! 谢谢
答案 0 :(得分:1)
此功能完全没有意义,而且是错误的:
int *getPointer(int var) {
int *ptr = &var;
return ptr;
}
ptr
指向局部变量var
(是的功能参数与局部变量大致相同)。但是一旦函数返回,该变量就不存在了。因此,getPointer
返回的指针基本上指向垃圾。
答案 1 :(得分:0)
您获得的指针是指向var
局部变量的指针。该变量存储在 STACK 中(不在堆中)。
所以,有几件事:
printf
在堆栈中打印某些内容,这些内容在您调用anotherFunction
时被覆盖。在这种情况下可以正常工作,但是这种行为是不确定的(也可能导致分段错误)。