#include<stdio.h> void foobar(int a, int *b, int **c) { int *p = &a; *p = 101; *c = b; b = p; } int main() { int a = 1; int b = 2; int c = 3; int *p = &c; foobar(a, &b, &p); printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p); return (0); }
#include<stdio.h> void foobar(int a, int *b, int **c) { int *p = &a; *p = 101; *c = b; b = p; } int main() { int a = 1; int b = 2; int c = 3; int *p = &c; foobar(a, &b, &p); printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p); return (0); }
a=1, b=2, c=3, *p=2
a=101, b=2, c=3, *p=2
a=101, b=101, c=2, *p=3
a=1, b=101, c=2, *p=3
①a是值传递,不会对主函数有什么影响
②指针传递
int *b = &b; 传送的b的地址
函数形参 主函数实参
int *b = &b;
(函数形参)b = (函数形参)p //bp存放的均是a的地址
但是函数里面的变化,只是形参b发生了变换,主函数中的b不会有影响,
(指针传递要想有影响 *b = *p,比如经典题目,利用指针传参交换两个数的值)
③双指针传递
函数形参 主函数实参
int **c = &p; c存放p的地址
*c就是p
c是int**型
*c是int * 型 形参b也是int *型
*c = b // *c ,b存放的是主函数实参b的地址