指针的概念 - 学习笔记
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。
注:上述内容仅为学习笔记,代码执行结果有待实际验证。