谈C/C++指针精华(一)
[摘要]
指针是C和C++语言编程中最重要的观念之一,也是最容易发生狐疑并导致措施堕落的问题之一。操作指针编程可以暗示各类数据布局, 通过指针可利用主调函数和被调函数之间共享变量或数据布局,便于实现双向数据通讯;并能像汇编语言一样处理惩罚内存地点,从而编出简练而高效的措施。指针极大地富厚了C和C++语言的成果。
在本文中,主要分两部门对指针举办接头。首先,基本篇接头关于指针的内容和运算操纵等,可以是读者对指针的常识有必然相识和认识;随后在利用篇中重点接头指针的各类应用,揭露指针在日常编程中的精华,从而使读者可以或许真正地相识、认识和利用指针。
第一篇:基本篇
1.1指针的观念
谈到指针,它的机动性和难节制性让很多措施员谈虎色变;但它的直接操纵内存,在数据
操纵方面有着速度快,节省内存等利益,又使很多C++措施员的深爱不以。那么指针毕竟是怎么样一个观念呢?
其实, 指针就是一类变量,是一类包括了其他变量或函数的地点的变量。与其他变量所差异的是,一般的变量包括的是实际的真实的数据,而指针是一个指示器,它汇报措施在内存的哪块区域可以找到数据。
好了,在这里我们可以这样界说指针:指针是一类包括了其他变量或函数的地点的变量,它内里存储的数值被表明成为内存的地点。
1.2指针的内容
简朴讲,指针有四个方面的内容:即指针的范例,指针所指向的范例,指针的值,指针自己所
占有的内存区。下面我们将别离叙述这些内容。
1.2.1指针的范例
从语法的角度看,指针的范例是指把指针声明语句中的指针名字去掉所剩下的部门。这是指针自己所具有的范例。譬喻:
int *ip; //指针的范例是int*
char *ip; //指针的范例是char*
int **ip; //指针的范例是int**
int (*ip)[5]; //指针的范例是int(*)[5]
1.2.2指针所指向的范例
当你通过指针来会见指针所指向的内存区时,指针所指向的范例抉择了编译器将把那片内存区里的内容当做什么范例来对待。从语法的角度看,指针所指向的范例是指针声明语句中的指针名字和名字左边的指针声明符*去掉所剩下的部门。譬喻:
int *ip; //指针所指向的范例是int
char *ip; //指针所指向的范例是char
int **ip; //指针所指向的范例是int*
int (*ip)[5]; //指针所指向的范例是int()[5]
1.2.3指针的值(或称指针所指向的内存区)
指针的值可能叫指针所指向的内存区或地点,是指针自己存储的数值,这个值将被编译器看成一个地点,而不是一个一般的数值。在32位措施里,所有范例的指针的值都是一个32位整数,因为32位措施里内存地点全都是32位长。 指针所指向的内存区就是从指针的值所代表的谁人内存地点开始,长度为sizeof(指针所指向的范例)的一片内存区。今后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地点的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地点。
指针所指向的内存区和指针所指向的范例是两个完全差异的观念。在上例中,指针所指向的范例已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,可能说是无意义的。
今后,每碰着一个指针,都应该问问:这个指针的范例是什么?指针指的范例是什么?该指针指向了那边?
1.2.4 指针自己所占有的内存区
指针自己所占有的内存区是指针自己占内存的巨细,这个你只要用函数sizeof(指针的
范例)测一下就知道了。在32位平台里,指针自己占据了4个字节的长度。
指针自己占据的内存这个观念在判定一个指针表达式是否是左值时很有用。