代码改变世界

指针的概念 - 学习笔记

2010-09-16 17:54  Jeff Chow  阅读(332)  评论(0编辑  收藏  举报

昨天回成教上课,叫数据结构的老师一直在讲指针,讲得我一头雾水,今天恶补一下基本概念。

 

  • 指针的类型与指针的指向类型。

这是两个比较容易混淆的概念。声明指针的时候必须指定它的类型,如同在高级语言中声明变量一样。指定了指针类型的同时也就指定了指针的指向类型。比如声明一个指针:

int * ptr

这就指定了指针的类型是int *,而指针的指向类型则是int。

 

  • 指针的指向区和指针的值。

指针的指向类型会影响到指针的指向区。指针的指向区,个人觉得应该将其与指针的值区分开来。对于上面声明的指针ptr,它的指向类型是int,那么它指向的内存区,在32位的系统中就应该是4个字节的内存区。而它的值,在32位的程序里,是一个32位的整数。不过这个整数会被编译器当作一个地址,而该指针的值则是指向某4个字节的内存区的首地址。

再补充个概念,内存以字节为单位,一个内存区可以包含多个内存单元,每个内存单元即一个字节的内存。

 

  • 指针的运算。

假如有:

int arrry[5] = {0, 1, 2, 3, 4};//定义数组并赋值。
int * ptr = array;//定义指针并令其指向整形数组array的首个元素array[0]。
ptr++;//指针的值自增。
(*ptr)++;//指针指向的变量自增。

上述代码声明了指针ptr,并令其指向数据的首个元素。然后ptr自增,因为其指向类型是int类型,所以在自增的时候它会指向下一个sizeof(int)的内存区域,即array[1],然后指针指向的值再自增。所以执行此代码后,数组array的值变为0,2,2,3,4。

 

注:上述内容仅为学习笔记,代码执行结果有待实际验证。