cpp(1)字符串数组函数

//1.指针:是一种数据类型,用于存放某个变量的地址值。此时该指针被称为是指向该变量。
//一个指针的类型决定于它所指向的变量的类型。
//指针既可以指向基本数据类型,又可以指向数组,函数,类,和文件等用户自定义数据类型
//指针可以初始化为0,NULL,或一个地址,内容为0或NULL的指针不指向任何变量,称为空指针
//2.数组的指针:数组名是一个指向该数组的常量指针(其值不能改变),也是该数组中首单元的
//地址值
//3.字符串与字符数组:字符串一般使用指针(包括变量指针和常量指针两种方式)表示其地址
//和内容,此地址也是其第一个字符的地址。
/*  第一种为变量指针方式EG: char *ch_ptr="home";(ch_ptr为变量指针)。
    第二种为常量指针方式EG: char  ch_arr[5]="OK";(ch_arr为常量指针)。此处字符数组名
是一个指向该数组的常量指针,它不能重新赋值。


//指针数组和数组指针:




------------------------------------------------------


//两种指针方式及其地址和字符串内容
#include<iostream.h>
#include<iomanip.h>
void main()
{
char *nm="Nice"; //变量指针
char name[]="OK"; //常量指针
cout<<"Addresses of the pointers 'nm' and 'name' themselves:"<<endl;
cout<<"'nm' is at "<<&nm<<",'name'is at "<<&name<<endl;
cout<<hex<<setiosflags(ios::uppercase)<<"'nm' points to 0x"<<(int)nm;
cout<<",'name' points to 0x"<<(int)name<<endl;
cout<<"Character string are '"<<nm<<"' and '";
cout<<name<<"'respectively."<<endl;
}


---------------------------------------------------------------


//指针数组
//使用一维一级字符指针数组来存放一星期中的各天
//show the function of a character array
#include <iostream.h>
char *name[]={"Monday","Tuesday","Wednesday",
"Thursday","Friday","Saturday","Sunday"};
void main()
{
int week;
while(1)
{
cout<<"Input sequential number:";
cin>>week;
if(week<1||week>7) break;
cout<<"This is "<<name[week-1]<<endl;
//指针数组第一个单元的序号为0,而用户输入的week值
//却从1开始,所以week应减1
}
cout<<"Program ended!"<<endl;
}
//使用指针数组显示数组中不同单元的字符串,
-==============================================================


函数(function)函数定义和函数原型(函数说明)


函数的定义格式如下:


<返回值> <函数名><(参数表)>
{
<函数体>
}
其中第一行也称函数头或首部(function header)
<返回值>也称<类型说明符>,也即,函数的返回值也代表函数的类型,如无返回值,则使用void表示。
//各C++系统对函数返回值都有自己规定的缺省值,vc++中函数返回值的缺省值是int
即返回整型值


函数原型的格式如下:
<返回值><函数名><(参数表)>; //可以看出:函数原型的格式是函数头加分号。


函数原型有两个重要意义:1>在函数使用前便于对函数进行参数类型检查。
2>参数的强制类型转换




函数指针与指针数组
//函数既然有地址,就可以具有指针
#include<iostream.h>
void fun();
void main()
{
void (*ptr)()=fun; //ptr即函数指针,指向函数fun


ptr();
}
void fun()
{
cout<<"fun() is called!"<<endl;
}
----------------------------------------------------------------------
指针数组:前面演示使用指针数组显示数组中不同单元的字符串,现在可以借鉴,使用函数指针数组来调用不同函数。


//函数指针数组
#include<iostream.h>
void f();
void g();
void h();
void main()
{
void (*ptr[])()={f,g,h}; //ptr[]即函数指针数组
//其各单元分别指向f,g,h
ptr[0](); //分别调用个单元所指向的各函数
ptr[1]();
ptr[2]();


}


void f()
{
cout<<"f()called"<<endl;
}
void g()
{
cout<<"g()called"<<endl;
}
void h()
{
cout<<"h()called"<<endl;
}
//ptr[]是指针数组,他的所有单元都是各函数的地址,因此可以
//通过访问格单元而获得各函数的地址,最后调用各函数。
-----------------------------------------------------------


//一个接近实用的函数指针数组


#include<iostream.h>


void disp_act(int num);
void act_water();
void act_vent();
void act_lubricat();


void(*action[])()={act_water,act_vent,act_lubricat};
//action 即函数指针数组,其各单元(指针)分别指向
//三个函数act_water(),act_vent(),和act_lubricat()


char *err_msg[]={"No cooling water!","No ventilation!",
"No lubrication!"};
void main()
{
int flag=-1;
disp_act(-flag);
flag=-2;
disp_act(-flag);
flag=-3;
disp_act(-flag);


}
void act_water()
{
cout<<"to open water valve!"<<endl;
}


void act_vent()
{
cout<<"to switch on ventilation fan!"<<endl;
}


void act_lubricat()
{
cout<<"to start lubrication pump!"<<endl;
}


void disp_act(int num)
{
cout<<err_msg[num-1];
action[num-1]();
//调用相关单元(指针)所指向的函数以采取动作
}


//上例中void (*action[])()定义action为函数指针数组,它的所有单元都是各函数
的地址,因此可以通过访问各单元而获得各函数的地址,最后调用个函数。
必须指出,所有函数必须完全相同。也即,所有函数的返回值和形参列表都应完全相同。
===================================================================
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值