指针热身——指针基础概念

#include <stdio.h>

int main(void)

{   

  //注:指针=地址,指针就是地址,地址就是指针,只是名字不同而已。   

  int * p;     //p是变量的名字,int * 表示该变量p指向存放int类型变量的地址    

        //int * p; 不表示定义了一个变量为*p的整型变量,而是定义了一个int*类型的变量p    

       //int *p; 应该这样理解,定义了一个变量名p,他的类型是int*类型,实际上就是存放了一个类型为int的地址

   int i=3;

       //  i是整型,因此指向变量i的指针变量p也必须是指向存放整型变量的地址。也就是说i是int类型,那么p就必须是int *类型。  

  p=&i;

                  /*    1、p保存了i的地址,也就是说p指向了i   

          2、p是个指针变量,而i是一个整型变量,故p不等于i,也就是说修改p的值不影响i的值,修改i的值不影响p的值    

          3、如果类型为int*的变量p指向了某个普通的变量,也就是说p保存了普通变量i的地址     *p 等价于 i :在程序当中出现*p的地方都可以用i来替换,出现i的地方都能够用*p来替换,*p与i 是完全等价相同的。

            4、*p与p是俩表示的意思是完全不一样的。*p与i等价,p与&i完全等价。   

       */

   return 0;

}

  /*  指针和指针变量:(指针是一个值(常量),指针变量是用来存放指针的.他是一个变量)  指针:指针就是一个地址,地址是存储变量内存单元的编号(一般都是16进制)。故指针他是一个值,当你定义一个变量的时候,  系统会自动分配一个内存单元,内存单元是用来存储变量的值。但是这个内存单元有一个编号,这个编号就是地址。也就是指针。

    而指针变量:指针变量就是用来存储指针的,是一个变量。

  比喻:酒店的房间606号房间。606就是该房间的编号,也就是地址。也是指针。你去开房就相当于给你分配了一个内存空间。而指针变量就是用来存放   房间号的,比如说有606,607,608等等。而房间里面的客人就是值,指针指向的值。

  */

  /*

   *p:我谈谈对*的理解:  *: 降级的意思。也就是说有*的话,你可以理解成降级,p是地址,*p就是通过*进行降级,从内存单元的编号降级到内存单元里面的值。也就是地址  内的值。地址降级是值。行降级是列。p:地址,*p:降级是值,&(*p)=&i,

   */

指针经典程序案例:

#include<stdio.h>

int main(void)

{

  int a=3,b=5;

  swap_1(a,b);  //该调用时错误的

  printf("a=%d b=%d ",a,b); //a=3,b=5

  swap_2(a,b); //该调用时错误的

  printf("a=%d b=%d ",a,b);//a=3, b=5

  swap_3(a,b);  //正确

  printf("a=%d b=%d ",a,b);//a=5,b=3

  return 0;

}

void swap_1(int a, int b)

{

  int temp;

  temp=a;

  a=b;

  b=temp;

}

void swap_2(int * p, int * q)

{

  int * temp;

  temp=p;

  p=q;

  q=temp;

  

}

void swap_3(int * p, int * q)

{

  int temp;

  temp=*p;

  *p=*q;

  *q=temp;

}

原文地址:https://www.cnblogs.com/fengkui/p/5992490.html