一.总述
-
函数在调用之后才会在内存中分配空间。而函数一系列活动在它自己的内存空间中,与main中元素无关(除了初始化),如果想改变main中元素,则需要使用指针间接访问
二.例子论证
-
不使用指针,按值传递
1 #include <stdio.h>
2 void swap(int a,int b)
3 {
4 int tem;
5 tem=a;
6 a=b;
7 b=tem;
8 }
9
10 int main()
11 {
12 int a=3;
13 int b=5;
14 swap(a,b);
15 printf("%d %d\n",a,b);
16 return 0;
17
18 }
main中a,b给swap初始化,如果不用指针,则传入swap的a,b与main中a,b在栈中并不是同一个a,b,所以swap中a,b交换位置只是在swap存储空间内,并随着swap结束而释放,并不改变main中a,b。
-
使用指针间接访问,按地址传递
1 #include <stdio.h>
2 void swap(int*a,int*b)
3 {
4 int tem;
5 tem=*a;
6 *a=*b;
7 *b=tem;
8 }
9
10 int main()
11 {
12 int a=3;
13 int b=5;
14 swap(&a,&b);
15 printf("%d %d\n",a,b);
16 return 0;
17
18 }
此时swap中放着的是指向main中a,b的指针,而*a,*b,tem的一系列操作使main中a,b交换
一个小tips:
所有变量均有地址,均可用取地址符&(X)
register int a,这种寄存器变量不在内存中,在寄存器中,无地址,只有在内存中才有地址。