指针,函数,数组打杂混学习以及typedef学习笔记

我认为需要注意的知识点都放在注释里面了。


//对于函数指针的定义
//	如:
//			char*(*pfunction_case)(int,int); 申明了一个有两个整形参数的函数实例,实例名称为pfunction_case,返回值为char
//			char*(*pfunction_case[])(int,int); 申明了一个有两个整形参数的函数实例数组,实例名称为pfunction_case,返回值为char
//		也可以这么定义:
//			typedef char*(*pFuncType)(int,int);-----------申明函数类型
//			pFuncType func_case;				----------------创建指针变量
//			pFuncType func_arr_case[3]={f0,f1,f2};--------初始化
//			funct_case = afunc_case;		-----------赋值
//			funct_case(int,int)				-----------通过指针调用函数



#include<iostream>
#include<string>
using namespace std;

typedef int (*P2Arr)[3];
typedef int* Arr2P[2];

void p_arrtest(){
	int a[2][3]={1,2,3,4,5,6};
	cout<<a<<"\t"<<&a<<endl;	//a与&a是一个值
	int (*x)[3];
	int * b;
	int* y[2];
	int **z;		
	x=a;			//ok!!!!
	z=y;			//ok!!!! **z *号从左向右层层进*z=y[0],*(z+1)=y[1];
	y[0]=new int[3];y[0][0]=1;y[0][1]=2;y[0][2]=3;		//也暗示多维数组不同维之间可能是不连续的。
	int* tmp=new int[10];

	y[1]=new int[3];y[1][0]=4;y[1][1]=5;y[1][2]=6;
	delete []tmp;
	cout<<"**z:"<<*(*(z+1)+1)<<endl;
	cout<<"a vs &a: "<<a<<"VS"<<&a<<endl;		//一样一样的
	b=(int*)a;cout<<b[5]<<endl;					//二维变一维,ok
	b=(int*)x;cout<<b[5]<<endl;					//ok
	b=(int*)y;cout<<b[5]<<endl;					//no,不连续
	b=(int*)z;cout<<b[5]<<endl;					//no,不连续
}

char* f0(int n){
	char * str=new char[n+1];
	strcpy(str,"f0f000000");
	return str;
};
char* f1(int n){
	char * str=new char[n+1];
	strcpy(str,"f1111111111");
	return str;
}
char* f2(int n){
	char * str=new char[n+1];
	strcpy(str,"f2222222222");
	return str;
}

char* (*pfunction[])(int )={f0,f1,f2};			//函数指针数组
char* pf_param_test(char* (*p)(int ),int n){		//函数指针作为参数传递,函数的参数由调用函数参数提供。
	return (*p)(n);
}

int main(){

/****指针和数组之间的缠缠绵绵*******/
p_arrtest();
/*********end*******/

/**********函数指针****************/
char* f0(int );
char* (*pf)(int);			//函数指针
//pf=f0;						//函数指针赋值
pf=&f0;							//和上面一样

cout<<"函数指针中:"<<endl<<(*pf)(2)<<endl<<endl;
cout<<"函数指针数组中:"<<endl;
cout<<(*pfunction[0])(0)<<endl;
cout<<(*pfunction[1])(1)<<endl;
cout<<(*(pfunction+1))(1)<<endl;
cout<<(*pfunction[2])(2)<<endl;
cout<<endl;

cout<<"函数指针作为参数: "<<endl<<pf_param_test(f0,0)<<endl;;

return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值