c函數指針和指針函數如何使用何定義;如何調用使用


#include <stdio.h>

int * sum(int x); //聲明一個 指針函數 返回類型位一個指針變量 可以通過*p來獲取值
int (*pfun)(int,int);//聲明一個 函數指針
int max(int x,int y);//聲明全局函數
int getname(int x,int y, int(*p)(int,int));//聲明函數指針
int add(int x,int y);
int main(void)
{
	//int name = 400;
	int *re = sum(100);
	//sleep(1);
	printf("%d %p\n",*re,re);
	//sleep(2);
	printf("%d %p\n",*re,re);//嚴重有問題 居然值不一樣了
	
	//max = 0x12345;//錯誤 函數名和數組名的地址不允許修改
	pfun = max;//初始化函數指針 指向max函數的函數指針變量
	printf("sum的入口地址:%p\n",sum);
	printf("max的入口地址:%p pfun的地址:%p max的大小:%d\n",max, pfun, pfun(10,20));//函數名就是函數的入口也是地址
	
	int x = getname(44,55,max);//函數名稱 就是地址就是指針
	printf("x的值:%d\n",x);
	printf("x+y的值:%d\n",getname(10,20,add));
	
	
	return 0;
}
//定義函數指針變量
int getname(int x, int y,int(*p)(int,int)){
	
	return p(x,y);
}
int add(int x, int y)
{
	return x+y;
}
int max(int xx, int yy){
	return xx>yy?xx:yy;
}
int * sum(int x){
	int static sum =0;//static 修身的變量在數據段;不會被函數棧回收
	int *p = ∑//最好是定義一個指針變量
	int i;
	for(i=1;i<=x;i++){
		sum +=i;
	}
	return p;
	//return ∑//會警告 返回的是局部變量的地址
}

  

  

函數名和數組名不允許修改其地址;因為是常量;

函數指針:返回的是函數的類型數據

指針函數:返回的是一個指針地址

函數名和數組名一樣都是一個指針;即是地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM