//
//  main.c
//  C语言-指针
//
//  Created by cgq on 15/4/9.
//  Copyright (c) 2015年 cgq. All rights reserved.
//

#include <stdio.h>

//直接引用
void test()
{
    //通过变量名a找到内存里的地址,然后再将10以2进制的形式放入变量a的存储控件
    int a;
    a = 10;
    //  变量         地址      存储的内容
    //   a    ->    ffc1      0000 1010
}
//间接引用
void test2()
{
    //将变量a的地址存放在另一个变量中,然后通过变量b来间接引用变量a,间接读写变量a的值
    char a;
    char *b; // 这里的*b只是声明这是一个指针,
    //让指针变量b指向变量a
    b = &a;
    *b = 10;//这里的*b代表访问b中存储的地址对应的存储空间
    //  变量         地址      存储的内容
    //   a          ffc1      0000 1010(*b)
    //   b          ffc2      ffc1
    printf("a=%d\n",a);
    
    a = 11;
    printf("a赋值后=%d\n",*b); //*b代表取出变量a储存的值
}

//指针的使用
void swap(int *a1,int *a2)//按值传递和按引用传递的区别,按值传递不会修改原来的值的大小
{
    //交换a1和a2的值
    int temp;
    temp = *a1;
    *a1 = *a2;
    *a2= temp;
}
//同时获得a和b的加和减法操作结果,类似于out
void jiaAndjian(int a,int b,int *sum,int *minus)
{
    *sum=a+b;
    *minus = a-b;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    int a = 10;
    int b = 20;
    swap(&a,&b);
    printf("a=%d\nb=%d\n",a,b);
    int sum;
    int minus;
    jiaAndjian(a,b,&sum,&minus);
    printf("a+b=%d\na-b=%d\n",sum,minus);
    return 0;
}