WIN32控制台应用程序代码&注释:
#include<stdio.h>
#include "malloc.h"
int a = 0;
void foo(int b){b = 5;}
void foo1(int b){a = b;}
void foo2(int &b){b = 5;}
void bar(int *p) { *p = 5;}
void bar1(int *p){int c = 5;p = &c;}
void bar2(int **b){int c = 5;*b = &c;}
int main()
{
//值传递 - 变量操作
int b = 0;
foo(b);//变量作用域不同 值不变
printf("foo -- %d\n", b);
int c = 5;
foo1(c);//变量作用域相同 值改变
printf("foo1 -- %d\n", a);
//引用传递
b = 0;
foo2(b);//c语言不包含 值改变
printf("foo2 -- %d\n", b);
//指针传递 - 变量操作
b = 0;
int *p;
p = &b;
bar(p);
//参数p会创建_p指针,指向同一块内存,
//_p的内存变量改变,p也会改变 值改变
printf("bar -- %d\n", *p);
//指针传递 - 指针操作
b = 0;
p = &b;
bar1(p);
//参数p会创建_p指针,指向同一块内存,
//_p的指针改变,内存改变,p的指针不变,指向的内存不会改变 值不变
printf("bar1 -- %d\n", *p);
b = 0;
p = &b;
bar2(&p);
//参数p会创建_p二级指针,指向同一块内存-一级指针,
//_p的内存一级指针指向改变,内存改变,p的二级指针不变,p的一级指针指向改变,指向的内存改变 值改变
printf("bar2 -- %d\n", *p);
getchar();
return 0;
}