指针常量与常量指针,函数指针与指针函数,指针的指针
来源:互联网 发布:淘宝官方营销活动 编辑:程序博客网 时间:2024/05/02 02:33
一、指针常量与常量指针
(1)指针常量:指针本身是常量,它不能被改变(也就是说:一旦让它指向某一个变量或对象,就不能再让它指向别的变量或对象)。但它所指向的内容可以改变。
格式:
指针类型 *const 指针常量名=&变量名;
eg : int a; int *const ip2=&a;
(2)常量指针:指针所指向的内容是常量,不能改变,但指针本身可以改变。
格式:
数据类型 const * 常量指针名称;
或
const 数据类型 * 常量指针名称;
eg: int a; const int *ip=&a;
(3)example:
#include<iostream>
using namespace std;
int main()
{
int a=100;
int b=200;
/*------------------------常量指针-----------------------------------*/
const int *ip=&a; //定义常量指针
cout<<"*ip="<<*ip<<endl;
//*ip=200; //错误,指针所指向的内容是常量,不能改变
ip=&b; //正确,指针本身可以改变
cout<<"*ip="<<*ip<<endl;
/*------------------------指针常量-----------------------------------*/
int *const ip2=&a; //定义指针常量
cout<<"*ip2="<<*ip2<<endl;
//ip2=&b; //指针本身是常量,它不能被改变
*ip2=200; //正确,它所指向的值可以改变
cout<<"a="<<a<<endl;
cout<<"*ip2="<<*ip2<<endl;
return 0;
}
二、函数指针与指针函数
(1)指针函数:返回值为一个指针的函数,实际上就是返回一个地址给调用函数。
格式:
类型说明符 * 函数名(参数)
eg: int *fun(int a,int b);//由于返回的是一个地址,所以类型说明符一般都是int。
函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。
(2)函数指针:一个指向函数的指针。可以通过它来调用函数。
格式:
类型说明符 (*函数名)(参数)
eg: int (*fp)(int a,int b);
例如:
void (*fp)();
把函数的地址赋值给函数指针,可以采用下面两种形式:
fp=&function;
fp=function;
取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。
可以采用如下两种方式来通过指针调用函数:
x=(*fp)();
x=fp();
两种作用是一样的。
(3)example
#include<iostream>
using namespace std;
char *Get();
int main()
{
cout<<Get()<<endl;
return 0;
}
char *Get()
{
return "Test successful!";
}
//***********************************************/
//用函数指针实现函数的调用
#include<iostream>
using namespace std;
void (*fp)();
void Funa();
int main()
{
fp=Funa;//等价于fp=&Funa
(*fp)();
cout<<"***********************"<<endl;
fp();
return 0;
}
void Funa()
{
cout<<"This is Funa!"<<endl;
}
三、指针的指针
(1)eg: char **pc;
如果有三个星号,那就是指针的指针的指针.
(2)通过指针的指针,不仅可以访问它指向的指针,还可以访问它指向的指针所指向的数据。
(3)example:
//查找一个数组中<=0的第一个数及其所在位置
#include<iostream>
using namespace std;
void Search(int **);
int count=0;
int main()
{
int a[]={10,8,-2,888,0,6,9};
int *fpp=a;
Search(&fpp);
if(count<=sizeof(a)/sizeof(int))
cout<<*fpp<<":"<<count<<endl;
else
cout<<"nou found!"<<endl;
return 0;
}
void Search(int **fpps)
{
while(**fpps!=0)
{
count++;
if(**fpps<0)
break;
else
(*fpps)++;//*与++优先级相同,但结合性自右至左,所以要加括号
//x=*p++;等价于x=*(p++);
}
}
- 指针常量与常量指针,函数指针与指针函数,指针的指针
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 指针常量与常量指针
- 指针常量与常量指针
- 指针常量与常量指针
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- 常量指针与指针常量
- struts2 文件流, 文件输出到浏览器 文件下载
- 事件示例代码
- 指向函数的指针
- PostGIS开启开源空间数据库的未来
- 面向对象软件的测试用例的设计方法
- 指针常量与常量指针,函数指针与指针函数,指针的指针
- vpn
- oracle sys 与system的区别
- 三维GIS,看上去很美
- 一年蜕变时
- 卸载xcode
- IE无法浏览网页的常见原因及解决方法
- 理解地图维度概念
- 开启Office 2003出现要安装PRO11.MSI解决方法 (zhuan)