c - 函数似乎改变了指针指向的位置
问题描述
我编写了以下 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() 调用中会发生变化。我会很感激你的帮助!谢谢
解决方案
这个函数是完全没有意义和错误的:
int *getPointer(int var) {
int *ptr = &var;
return ptr;
}
ptr
指向局部变量var
(是的,函数参数或多或少与局部变量相同)。但是一旦函数返回,该变量就不再存在了。所以指针返回的指针getPointer
基本上都是垃圾。
推荐阅读
- angular - 背景地理位置:Promise 类型不存在订阅
- javascript - `page-break` 用于 iFrame 内的内容
- acumatica - CuryID 字段错误。无法将对象 Int32 转换为 String
- python - 熊猫不在 python3 中工作,但在 python 中工作
- android - 将 BigQuery 结果与 FCM 结合使用
- reactjs - componentWillRecieveProps 到 getDerivedStateFromProps 的转换
- python - 为什么除以两个列表项总是等于零?
- python - 基于列条件的 PySpark drop-dupes
- marklogic - MarkLogic - setting PATH variable for Gradle tasks
- javascript - 如何在html中使用jquery打印表单值