【前言】
可能很多人刚开始学习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.指针可以改变指向,当将指针的指向由旧的对象指向新的对象,会改变指针的值为新对象的地址,但是不会改变的指针的地址