指针

来源:互联网 发布:网络大电影上帝玩笑 编辑:程序博客网 时间:2024/05/16 16:04

    在当今计算机中,一般以一个字节作为一个内存单元。给每个内存单元分配一个编号,称为内存单元的地址。

    按照数据类型的不同,分配的内存单元的数目也不同。eg:int型数据占4个内存单元,char型占一个内存单元。一个变量所占用内存的首地址,称为该变量的地址。而一个变量的地址也称为该变量的指针

    int a;

    char ch;

    对这两条语句,假设C编译程序给出如图所示的内存分配形式。

   

   

             此处,int型变量a占用以2009开始的四个单元(即2009~2012),char型变量ch占用地址2013对应的一个单元。一旦为变量分配了内存单元,对变量的操作实质上就是对其内存单元的操作。

       a=100;

       ch='A';

       上述两条语句实现的功能是:将整数100存入到以地址2009开始的4个内存单元中,将字符常量A存入到地址2013对应的1个内存单元中。结合图示。此时变量a的地址是2009,内容是整形常量100;变量ch地址是2013,内容是字符常量'A'。

       指针变量用来存放另一个变量的地址

       定义指针变量的一般形式为:

       类型说明符 *变量名(其中的“*”表明变量是一个指针变量,而“类型说明符”则是该指针变量所指向的变量的数据类型。);

       eg:int *p;

               float *q;

       此处定义p为指向int型的指针变量,只能存储int型变量的地址。定义q为指向float型的指针变量,只能存储float型变量的地址。

       获取变量的地址示例

#include<stdio.h>

main()

{

    int i,*p;      /*定义一个指针变量*p    也可以定义为 int i,*p=&i;*/

    p=&i; /*"&"为取地址运算符。功能是获取紧随其后的变量的内存地址。本条语句表示将变量i的地址赋给指针变量p*/

    printf("p=%p\n",p);    /*%p用于以十六进制形式输出地址值*/

}

        此程序的运行结果不是一成不变的,因为变量i的内存空间是随机分配的。

    通过间接引用方式交换整型变量的值

#include<stdio.h>
main()
{
 int a,b,t;
 int *p1,*p2;
 a=100;
 b=10;
 p1=&a;
 p2=&b;
 t=*p1;      /*此句等价于t=a;*/
 *p1=*p2;    /*此句等价于a=b;*/
 *p2=t;      /*此句等价于b=t;*/
 printf("a=%d,b=%d\n",a,b);
 printf("*p1=%d,*p2=%d\n",*p1,*p2);
}

原创粉丝点击