指针的使用
来源:互联网 发布:php项目管理系统kis 编辑:程序博客网 时间:2024/06/07 05:24
指针是C和C++中的一个重要的概念,每一个学习和使用C和C++的人,都应深入的学习和掌握指针。
在了解指针的内容前应该了解数据在内存中的存储方式和读取方式。在程序中定义一个变量,在编译时就给这个变量分配内存单元。而在读取数据时有两种读取方式,一是直接存取(直接访问方式,这是指按变量地址存取变量值;而是间接存取(间接访问)方式,这是指将变量的地址存放在另一个变量中。我们可以定义这样一种特殊的变量专门用来存放地址。
一、定义和引用指针变量
1、几个有关概念:变量的指针就是变量的地址。
用来存放变量地址的变量就是指针变量。
指针变量指向的变量的类型就是该指针变量的基类型。
2、两个与指针变量有关的运算符:&:取地址运算符
*:指针运算符(间接访问运算符)
3、定义指针变量的一般形式为:
基类型*指针变量名
定义之后若要改变这个指针变量的指向,将被指向的变量地址赋给指针变量即可,运用&
eg:
在定义指针变量时应注意:①在定义指针变量时必须指明基类型。
②不能用一个整数给一个指针变量赋值。
eg:int *point=1(错误,因为指针变量是用来存放地址的变量)
③一个指针变量只能指向同一个类型的变量。
④在说明变量类型时一般不能说“point是一个指针变量”,而 应该说“point是指向整型数据的指针变量”。
4、定义其他类型的指针变量
(1)const指针
①指向常量的指针变量
用指向常量的指针变量只是限制了通过指针变量改变它指向的对象的值,但是可以改变指针变量的指向。
定义这种指针变量的一般形式为:
const 类型名*指针变量名
eg:
②常指针变量(常指针)
用常指针限制了指针变量的指向,但是可以通过指针变量改变它指向的对象的值。
定义常指针变量的一般类型为:
类型名 const*指针变量名
eg:
③指向常量的常指针
指向常量的常指针指向一个固定的对象,且该对象的值不能改变(即指向常量的指针和常指针的功能的累加)
定义指向常量的常指针的一般类型为:
const 类型名 const*指针变量名
(2)void指针类型
基类型为void的指针变量不指向任何类型的数据。在这里应注意:不要把“指向void类型”理解为能指向任何类型的数据,而应理解为“指向空类型”或者“不指向确定的类型”的数据。void类型的指针是过渡型的,在使用时必须转换为指定一个确定的数据类型的数据,才能访问实际存在的数据,否则它没有任何作用。
eg:
二、用指针函数参数
用指针数组做函数的作用是将一个变量的地址传给被调用函数的形参。这里应注意,指针变量和指针变量所指的变量的存储空间是不一样的。
1.交换a和b的值,而p1和p2的值不变。先看一个简单的例子
在这个例子中,将a的地址传给point_1,将b的地址传给point_2,在compare函数中相当于调换a和b的地址,point_1和point_2不变。看一下下面这个例子来区别一下
这里对比例子中,只是调换point_1和point_2,a和b不变,其程序运行如下
在这里,注意不要写成下面这种形式
这这个反例中,temp是一个指针变量,所以*temp应该是指针变量temp所指向的变量,但是在这个例子中,temp并未被赋值,它指向的单元是不可预见的,这样是很危险的。
三、数组与指针
1、指向数组元素的指针
一个变量有地址,一个数组中有若干个元素,每个元素都有相应的地址,所以指向数组元素的指针就是指数组元素的地址。例如:
这里应知道的是,在C或者C++中数组名代表数组中第一个元素的地址,所以上述第三个语句也可以写成
如果指针变量p指向数组中的某一个元素,则p+1则指向该数组中的下一个元素。下面是用指针变量指向数组元素的一个简单例子
更复杂的用指针变量做函数形参也是相似的用法,你们可以回去后写几个实例来熟练一下。
四、字符串与指针
在程序中如果定义一个字符指针并把它初始化,实则是将字符串中的第一个字符的地址赋予字符指针。在输出时,系统会先输出字符指针所指向的第一个字符,字符指针再逐次加1,知道预见’\0’为止。例如:
五、函数与指针
1、用函数指针调用函数
一个函数在编译时会被分配一个入口地址,而当函数指针指向一个函数时,这个函数入口地址就称为函数的指针。指向函数的指针变量的一般定义形式为:
函数类型(*变量名)(函数形参表);
例如 int(*p)(int,int);
下面举一个简单的例子,比较输出a和b的最大值:
2、返回指针值的函数、
一个函数可以返回整型值,字符值,实型值等,也可以返回指针型的数据,即地址。返回指针值得函数简称为指针函数,其定义形式一般如下:
类型名*函数名(参数列表);
例如: int *p(int a,int b);
六、指针数组和指向指针的指针
1、如果一个数组,其元素均为指针类型数据,该数组称为指针元素。一维指针数组的定义形式为:
类型名*数组名[数组元素];
例如: int *p[10];
2、指向指针的指针
例如 int **p;
这两个我就比不举例子了,你们可以自己尝试一下。
- 指针的指针使用
- 指针的指针使用总结
- 指针及其指针的使用
- 指针的使用二级指针
- 数组指针、指针数组、指向指针的指针使用总结
- 指针的安全使用
- 使用指针的规则
- 指针的安全使用
- 指针的安全使用
- FILE指针的使用
- 指针的使用
- 指针的安全使用
- 指针的使用误区
- file指针的使用
- 指针的使用
- 字符指针的使用
- 函数指针的使用
- 二级指针的使用
- 总结一下各大手机网络类型
- 安卓在代码中设置TextView的drawableLeft、drawableRight、drawableTop、drawableBottom
- MySQL 中的 InnoDB 与 MyISAM
- C++扬帆远航——11(斐波那契数列)
- 关于JavaWeb中的js,图片等资源在jsp文件中路径的配置
- 指针的使用
- java得到-100到100之间的随机数(包括-100和100)
- C语言学习:__stdcall、__cdcel和__fastcall三者的区别
- leetcode:Expression Add Operators
- 命令模式
- easyui多行选择值的处理
- 《数据结构》 单链表常用操作代码集合
- HDU 2175 汉诺塔IX
- 通过DBCA为数据库添加EM选件,成功登陆OEM