/*
总结:1 值传递, 不能改变实参的值。
2 指针传递(一维),不能改变指针的值,可以改变指针所指向的值。
3 指针的地址传递(二维),可以改变指针(一维)的值,可以改变指针所指向的值。
*/
#include "stdafx.h"
#include <stdlib.h>
void fun1(int *a) //函数传递地址给形参a,形参a改变,原来的实参不变
{
int b = 3;
a = &b;
}
void fun2(int *a) //函数传递地址给形参a,地址所指向的值发生改变
{
int b = 3;
*a = b;
}
void test1()
{
int a = 1;
printf("&a = %p, a = %d\n", &a, a); //result: &a = 0018FEF0, a = 1
fun1(&a);
printf("&a = %p, a = %d\n", &a, a); //result: &a = 0018FEF0, a = 1
}
void test2()
{
int a = 1;
printf("&a = %p, a = %d\n", &a, a); //result: &a = 0018FEF0, a = 1
fun2(&a);
printf("&a = %p, a = %d\n", &a, a); //result: &a = 0018FEF0, a = 3
}
void test3()
{
int b = 1;
int *a = &b;
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FEF0, *a = 1
fun1(a);
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FEF0, *a = 1
}
void test4()
{
int b = 1;
int *a = &b;
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FEF0, *a = 1
fun2(a);
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FEF0, *a = 3
}
void fun3(int **a) //传递二维指针(指针的地址),改变地址的指向就是改变了一维指针
{
int b = 3;
*a = &b;
}
void test5()
{
int b = 1;
int *a = &b;
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FEF0, *a = 1
fun3(&a);
printf("a = %p, *a = %d\n", a, *a); //result: a = 0018FE90, *a = 3
}
int main(int argc, char* argv[])
{
//test1();
//test2();
//test3();
//test4();
//test5();
return 0;
}
关于指针的说明1——指针.c
最新推荐文章于 2023-07-20 11:46:23 发布