C语言指针和函数调用说明
指针和函数:
传值和传址:
#include <stdio.h>
int swap(int* a, int* b) {
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
return 0;
}
int main() {
int m = 23;
int n = 57;
printf("----before--- m = %d, n=%d \n ", m, n);
swap(&m,&n);
printf("----after--- m = %d, n=%d \n ", m, n);
return 0;
}
----before--- m = 23, n=57
----after--- m = 57, n=23
- C语言方法调用为值传递
- main方法开始执行时在栈中开辟内存空间,存储变量m,n
- 调用方法
swap()
时,将实参m=23,n=57的地址值传递给形参a,b(在栈中开辟另一块内存空间用来存储a,b) - swap方法通过指针修改实参m,n的值
- swap运行结束后释放方法开辟的内存空间
说明
栈 帧:
-
当函数调用时,系统会在 stack 空间上申请一块内存区域,用来供函数调用,主要存放 形参 和 局部变量(定义在函数内部)。
-
当函数调用结束,这块内存区域自动被释放(消失)。
传值和传址:(实际最为传值)
C语言全为值传递
传值:函数调用期间,实参将自己的值,拷贝一份给形参。
传址:函数调用期间,实参将地址值,拷贝一份给形参。 地址值在swap函数栈帧内部,修改了main函数栈帧内部的局部变量值)