#include <stdio.h>

int main(void)

{

    int *p;

    int i=5;

    char ch='A';

    p=&i;

    *p=99;

    printf("i=%d,*p=%d\n",i,*p);

}

p=&i,这样变量p就保存了变量i的地址,*p=9999赋值给*p,又因为*p等价于变量i,因此变量i的值也变成99

#include <stdio.h>

void swap(int i,int j)

{

    int t;

    t=i; i=j; j=t;

}

int main(void)

{

    int a=3;

    int b=5;

    swap(a,b);

    printf("a=%d,b=%d\n",a,b);

    return 0;

}

ab的值并没有互换,因为当swap函数执行完成后,ab的内存空间自动被收回了,因此最后打印的ab的值为主函数中ab定义的值

#include <stdio.h>

void swap(int *i,int *j)

{

    int t;

    t=*i; *i=*j; *j=t;

}

int main(void)

{

    int a=3;

    int b=5;

    swap(&a,&b);

    printf("a=%d,b=%d\n",a,b);

    return 0;

}

swap传递了两个实参&a&b&a代表的是变量i&b代表的是变量j,相当于i=&aj=&b,因此*i等价于变量a*j等价于变量b,因为在内存空间找到了变量ab的地址,因此可以修改变量ab的值,上面的例子说明了被调用函数通过指针可以修改调用函数多个变量的值,下面的例子也可以说明:

#include <stdio.h>

void swap(int *i,int *j)

{

    *i=1;

    *j=2;

}

int main(void)

{

    int a=3;

    int b=5;

    swap(&a,&b);

    printf("a=%d,b=%d\n",a,b);

    return 0;

}

#include <stdio.h>

void f(int *pa,int len)

{

    int i;

    for (i=0;i<len;i++)

        printf("%d",*(pa+i));

        printf("\n");

}

int main(void)

{

    int a[5]={1,2,3,4,5};

    f(a,5);

    return 0;

}

a[5]={1,2,3,4,5}定义的是一个数组,f(a,5);中的a代表的是a[0]的地址,pa就代表a[i]的地址,*(pa+i)中的pa+i分别代表了a[0]-a[5]之间的数组变量地址,上面的*(pa+1)也可以用pa[i]表示