C/C++指针之一
来源:互联网 发布:美国人饮食 知乎 编辑:程序博客网 时间:2024/06/07 05:52
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个字节的长度。
指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。
- C/C++指针之一
- C指针系列之一 指针
- C/C++指针详解之一
- C和指针笔记之一
- C/C++函数指针总结之一:C函数指针
- Crack C语言之-指针之一
- C/C++ 核心之一 指针与数组
- C++Primer学习之一引用和指针
- 《C和指针》之一学习规划
- 【C/C++学习】之一、指针和引用的区别
- C 语言中的好基友 数组和指针之一
- 《More Effective C++》学习笔记之一引用与指针
- C语言的指针(进阶篇章之一)
- C--指针
- C-指针
- C指针
- C指针
- C指针
- C语言经典100例 - 003
- OC各种数据类型之间的转换方法
- socket点对点通信(基于模拟器)
- Lumigent Log Explorer是不是可以恢复所有用户误操作的数据?
- hdu 1232 畅通工程
- C/C++指针之一
- C/C++指针之二
- ORA-00600: internal error code, arguments: [spstp: ORACLE_HOME uid does not match euid], [504], [500
- Lucene 4.0 的重大升级内容一览
- C/C++指针之三
- Redis多客户端连接问题总结
- 清理QT
- android上的i-jetty (1)环境搭建
- ORA-12712: new character set must be a superset of old character set