C语言的指针

来源:互联网 发布:淘宝店铺可以转吗 编辑:程序博客网 时间:2024/06/11 23:27

【前言】

      可能很多人刚开始学习C语言,对指针是什么东西不是很理解。从个人经验来看,C语言指针确实是个门槛,但如果能够真正理解指针,那么基本上C语言就入门了

【概念】

     在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。这是摘抄百科的定义,这个定义有点生硬。我的理解:指针本质上跟普通的变量没有区别,只不过它是专门用来指向某个地址空间的变量而已。


【普通变量的模型】

    在C语言中定义一个普通变量,那么在内存中就会分配空间,例如:

     int a = 10;

     为了简单起见,假设变量a的地址为0x200,则a的变量模型如下所示:变量的地址是0x200,变量的值是10,变量的名称是a

     


【指针的内存模型】

    下面定义一个指针:

    int a = 10;

    int *p = &a;

    假设指针的地址为0x400,它指向的就是变量a,那模型如下

  

  【指针的用法代码实例】


#include <stdio.h>#include <string.h>int main(){int a = 12;int b = 20;    int *p = &a;printf("指针p指向变量a:\n");printf("value of pointer = 0x%x\n",p);//打印指针的值,此时指针里存放的是变量a的地址printf("address of pointer = 0x%x\n",&p);//打印指针的地址printf("value of variable by pointer = %d\n",*p);//取指针指向的变量的值    p = &b;printf("指针p指向变量b:\n");printf("value of pointer = 0x%x\n",p);//打印指针的值,此时指针里存放的是变量b的地址printf("address of pointer = 0x%x\n",&p);//打印指针的地址,由于指针的空间已经分配,则地址不会改变printf("value of variable by pointer = %d\n",*p);//取指针指向的变量的值,此时就是指针新指向变量b的值getchar();return 0;}



总结:

1.指针与普通变量一样,也是要分配空间,有自己的地址和值。指针的地址是编译器分配,指针的值就是其指向对象的地址

2.指针可以改变指向,当将指针的指向由旧的对象指向新的对象,会改变指针的值为新对象的地址,但是不会改变的指针的地址