(c/c++学习笔记四)指针基础
2014-10-11 16:26
281 查看
一.指针的基本概念
对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量成为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某个内存单元的指针。
指针用于指向对象。
严格的说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。“指针”是指地址,是常量。“指针变量”是指取值为地址的变量。
二.指针的类型和指针指向的类型
只有特定类型的指针才能指向特定类型的数据,比如只有int类型的指针才能用来指向int类型的值,其他类型的指针不行。在定义指针的时候要指明指针的类型,这样程序才知道应该在内存中保留多大的空间给这个指针。
从语法的角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。
例:
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(3)int **ptr; //指针的类型是 int **
(4)int (*ptr)[3]; //指针的类型是 int(*)[3]
(5)int *(*ptr)[4]; //指针的类型是 int *(*)[4]
指针是指向内存种的一块内存空间,而这块空间的大小要根据指针指向的数据的类型的长度来分配。当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。
例:
(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
(3)int **ptr; //指针所指向的的类型是 int *
(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]
三.指针的值
指针的值是指针指向的内存区域地址。 所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念。
四.指针本身所占的内存区域
在32位平台上,指针本身占据了4个字节的长度。
五. &和*
&是取地址运算符,功能是取变量的地址,运算结果是一个指针。
*是取内容运算符,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。
需要注意的是指针运算符*和指针说明符*(在定义指针的时候 int *p)不是一回事,后者的*是类型说明符,说明其后的变量是指针类型。而表达式中出现的*则是一个运算符,用于获取指针变量所指的变量内容。
对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量成为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某个内存单元的指针。
指针用于指向对象。
严格的说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。“指针”是指地址,是常量。“指针变量”是指取值为地址的变量。
二.指针的类型和指针指向的类型
只有特定类型的指针才能指向特定类型的数据,比如只有int类型的指针才能用来指向int类型的值,其他类型的指针不行。在定义指针的时候要指明指针的类型,这样程序才知道应该在内存中保留多大的空间给这个指针。
从语法的角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。
例:
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(3)int **ptr; //指针的类型是 int **
(4)int (*ptr)[3]; //指针的类型是 int(*)[3]
(5)int *(*ptr)[4]; //指针的类型是 int *(*)[4]
指针是指向内存种的一块内存空间,而这块空间的大小要根据指针指向的数据的类型的长度来分配。当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。
例:
(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
(3)int **ptr; //指针所指向的的类型是 int *
(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]
三.指针的值
指针的值是指针指向的内存区域地址。 所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念。
四.指针本身所占的内存区域
在32位平台上,指针本身占据了4个字节的长度。
五. &和*
&是取地址运算符,功能是取变量的地址,运算结果是一个指针。
*是取内容运算符,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。
需要注意的是指针运算符*和指针说明符*(在定义指针的时候 int *p)不是一回事,后者的*是类型说明符,说明其后的变量是指针类型。而表达式中出现的*则是一个运算符,用于获取指针变量所指的变量内容。
相关文章推荐
- C++基础学习笔记---指针
- C++基础学习笔记:指针
- [学习笔记]C和C++中指针的基础知识点(二)
- (C/C++ 学习笔记)函数指针语法基础
- C++基础教程 学习笔记(二) 数组、字符串和指针
- [学习笔记]C和C++中指针的基础知识点(一)
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- C/C++ 基础知识学习笔记 (不断更新中)
- c++指针学习笔记--交换两个字符串数据收藏
- C++学习笔记(3)——成员变量、成员函数的指针
- 《面向对象基础:C++实现》学习笔记之七
- 智能指针auto_prt的使用(c++学习笔记)
- 《面向对象基础:C++实现》学习笔记之八
- C++学习笔记(一)--基础知识sizeof用法
- C++/GDI+ 学习笔记(三)——基础
- C++学习笔记-指针和引用的注意事项
- C++学习笔记---关于指针
- C++学习笔记二 —— 3.3 指针类型
- C/C++学习笔记:指向指针的指针
- C/C++学习笔记:指针与字符串