关于C语言局部变量的思考

    函数的形参变量要等到函数被调用时才分配内存,局部变量也是如此。

    局部变量是定义在函数内部的变量,它的作用域只在函数内部,函数之外调用它会产生你不能控制的结果。我们先来看一个例子:

#include <stdio.h>
int *Test(int);
int *Test(int tmp){
    int a = 9;
    return &a;    //这里返回 局部变量a 的地址
}
int main(void) {
    int *p;
    int num = 1;
    p = Test(num);
    printf("%d\n", *p);    //输出函数返回的结果
    return 0;
}

      这段程序并不能正常运行,错误提示是:

警告:函数返回地址是局部变量地址

     说明主函数并不能调用子函数中的变量,这是因为程序中的变量都在系统堆栈中,在程序执行过程中,系统堆栈的栈顶指针在不断变化,随着子函数调用结束,栈顶指针会回落到主函数执行的地方,这时的局部变量就不在系统堆栈中了,也就无法使用了。

    通过调用函数交换两数的程序:

#include <stdio.h>
void realExchange(int *, int *);
void realExchange(int *one, int *another) {
	int tmp;
	tmp = *one;			
	*one = *another;	
	*another = tmp;		
}
int main() {
	int num1 = 2;
	int num2 = 6;
	realExchange(&num1, &num2);
	printf("交换结果:%d %d\n", num1, num2);	
	return 0;
}

 运行结果:    

交换结果:6 2

这里通过交换指针所指向空间的值,实现主函数中2 和 6 的交换。


猜你喜欢

转载自blog.csdn.net/weixin_41249411/article/details/79936837