c语言——指针

指针

回调函数

定义:函数指针最常用的地方在于将一个函数作为参数传递给另一个函数的时候要用函数指针将一个函数作为参数 传递给另外一个函数,将这个函数称为回调函数。

int js(int (*p)(int a,int b),int a,int b)
{
	return p(a,b);
}
int add(int a,int b)
{
	return a+b;
 } 
int sub(int a,int b)
{
	return a-b;
 } 
int main()
{
	int a=10;
	int b=20;
	int c;
	c = js(add,a,b);
	printf("%d\n",c);
	c = js(sub,a,b);
	printf("%d",c);
	return 0;
 } 


函数指针数组

定义:本质是一个数组,数组里面的每个元素都是一个函数指针。

表示: 返回值类型 (*函数指针变量名【函数指针的个数】) (形参列表)

int	(*p[10]) (int a,int b)

int add(int a,int b)
{
	return a+b;
}
int sub(int a,int b)
{
	return a-b;
} 
int cheng(int a,int b)
{
	return a*b;
} 
int chu(int a,int b)
{
	return a/b;
} 
int quyu(int a,int b)
{
	return a%b;
} 
int main()
{
	int a=10;
	int b=20;
	int i;
	int (*p[5])(int a,int b)={add,sub,cheng,chu,quyu};//数组有五个元素,数组中额每个元素都是一个函数指针
	for(i=0;i<5;i++)
	{
		printf("%d\n",p[i](a,b));
	} 
	return 0;
 } 

只读指针变量和只读变量指针

只读指针变量

​ 地址不能被修改,值可以改。

​ 表示: 类型 * const 变量名

int main()
{
	int a=10;
	int b=20;
	int *const p=&a;
	printf("%p\n",p);
	printf("%d\n",*p);
//	p=&b;//用const修饰的指针变量地址无法改变 
//	printf("%p",p);
//	printf("%d",*p);
	*p=100;
	printf("%p\n",p);
	printf("%d\n",*p);
	printf("%d",a); 
	return 0;
 } 

只读变量指针

​ 地址可以修改,值不能修改。

​ 表示:类型 const *变量名

int main()
{
	int a=10;
	int b=20;
	int const *p=&a;
	printf("%p\n",p);
	printf("%d\n",*p);
	printf("%d\n",a);
	p =&b;
	printf("%p\n",p);
	printf("%d\n",*p);
	printf("%d\n",a);
//	*p=200;
	return 0;
 } 

特殊指针

硬编码付给指针:int *p=100

空指针:int *p=NULL

野指针:用malloc()函数开辟,free()释放

int main()

{

int *p;

p=malloc(100);

if(p==NULL)

{

return -1;

}

p=&a;

...

free(p);

p=NULL;

return 0;

}

万能指针:void *

	int main()
	{
	char ch='z';
	void *pp;
	pp= &ch;
	printf("%c",*((char*)pp));//将指针void转换char型 
	*((char*)pp)='x';
	printf("%c",*((char*)pp));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值