编辑代码

#include <stdio.h>
void fun(int a, int b);
void fun0(int *a, int *b);
int main () {
    /*
    指针
        指针就是内存地址
    指针的定义(声明、创建)
        数据类型 *变量名;
    给指针变量进行赋值
        需要用&取地址符来给指针变量进行赋值
    取出指针中的数据
        需要用*取值符来取出指针中的数据值
    指针变量作为函数参数
        传入到函数中的是数据的地址
    一维数组与指针
        1.指针指向一维数组时
            保存的是数组中第0个位置上的元素
        2.数组名可以看做是一个指针
        3.数组名作为函数的参数时
            可以直接在定义函数时
            就是用指针来进行编写
    二维数组与指针
        1.取出二维数组的元素需要使用两次*取值符
        2.当一个指针指向二维数组时
            需要使用(*指针名)[列大小]的形式进行定义

    */
    int *p;
    int a = 3;
    p = &a;
    printf("a = %d\n", *p);

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

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

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

    int arr[] = {3, 5};
    p = arr;
    printf("arr[0] = %d\n", *arr);
    printf("arr[1] = %d\n", *(p + 1));

    int arr0[2][2] = {2, 0, 3, 1};
    printf("arr0[0][0] = %d\n", **arr0);
    printf("arr0[1][1] = %d\n", *(*(arr0 + 1) + 1));

    int (*p0)[2] = arr0;
    printf("arr0[0][0] = %d\n", **p0);
    printf("arr0[1][1] = %d\n", *(*(p0 + 1) + 1));


    return 0;
    }
    /*
        交换两个参数的值
    */
    void fun(int a, int b) {
    a = a + b;
    b = a - b;
    a = a - b;
    }
    /*
        交换两个地址上的值
    */
    void fun0(int *a, int *b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    }