当前位置:网站首页>Function pointer and pointer function in C language

Function pointer and pointer function in C language

2022-07-07 04:55:00 Xiaohao programming

Array pointer

#include <stdio.h>

int getTheData(int (*p)[4],int hang,int lie)//(*p)[4] It's an array pointer 
{
    
	int data;
	data = *(*(p+hang)+lie);// Find the value in the corresponding array 
	return data;
	//return p[hang][lie];// Empathy   Find the value in the corresponding array 
}
void tipsInputHangLie(int *pm, int *pn)// The variable type in the formal parameter should be the same as that in the argument , All are int
{
    
	printf(" Enter row and column values :\n");
	scanf("%d%d",pm,pn);// The pointer is the address , Operate on the corresponding address 
	puts("done!");
}
//arr,arr[0]
int main()
{
    
	int arr[3][4] = {
    {
    11,22,33,44},{
    12,13,15,16},{
    22,66,77,88}};//arr+
	int ihang,ilie;
	int data;
	
	//1.  Prompt the user to enter row and column values 
	tipsInputHangLie(&ihang,&ilie);// Operate on the address , So the operation in the function can change ihang and ilie Value 
	//2.  Find the number corresponding to the row and column value 
	data = getTheData(arr,ihang,ilie);//arr Is the address of the array , That's the pointer 
	//3.  Print out 
	printf("%d That's ok %d Is the value of the column %d\n",ihang,ilie,data);
}

Output content
 Insert picture description here

A function pointer

The underlying logic of returning a function is the function pointer

#include <stdio.h>
#include <stdlib.h>

int getMax(int data1, int data2)
{
    
	return data1>data2 ? data1:data2;
}

int getMin(int data1, int data2)
{
    
	return data1<data2 ? data1:data2;
}

int getSum(int data1, int data2)
{
    
	return data1+data2;
}

int dataHandler(int data1, int data2, int (*pfunc)(int, int ))// The third parameter is the function pointer , There are requirements for types in function pointers , The formal parameter name can be omitted 
{
    
	int ret;
	ret = (*pfunc)(data1,data2);// Call function , Get the return value 
	return ret;
}
int main()
{
    	
	int a = 10;
	int b = 20;
	int cmd;
	int ret;
	
	int (*pfunc)(int , int );
	
	printf(" Please enter 1( Take a big value ),2( Take a small value ), perhaps 3( Sum up )\n");
	scanf("%d",&cmd);
	switch(cmd){
    
		case 1:
			pfunc = getMax;// The address has been changed , It changes the corresponding value 
		break;
		case 2:
			pfunc = getMin;
		break;
		case 3:
			pfunc = getSum;
		break;
		default:
			printf(" Input error !@ Input 1( Take a big value ),2( Take a small value ), perhaps 3( Sum up )\n");
			exit(-1);// Abnormal exit 
		break;
	}
	ret = dataHandler(a,b,pfunc);//pfunc Get the corresponding function name , The third argument pfunc Is the address of the function pointer 
	printf("ret = %d\n",ret);
	return 0;
}

Output content
 Insert picture description here

Function pointer array

#include <stdio.h>
#include <stdlib.h>

int getMax(int data1, int data2)
{
    
	return data1>data2 ? data1:data2;
}

int getMin(int data1, int data2)
{
    
	return data1<data2 ? data1:data2;
}

int getSum(int data1, int data2)
{
    
	return data1+data2;
}
int main()
{
    	
	int a = 10;
	int b = 20;
	int ret;
	
	int (*pfunc[3])(int , int )={
    
		getMin,
		getMax,
		getSum};// Function pointer array ! initialization , Put the values in the array ( This value is an address , That's the pointer , This pointer is a function pointer , Put the three function addresses in the array )
	
	for(int i=0;i<3;i++){
    
		ret = (*pfunc[i])(a,b);// Traverse the three function pointers in the array , Get the return value 
		printf("ret = %d\n",ret);
	}
	
	return 0;
}

Output content
 Insert picture description here

A function pointer

#include <stdio.h>

int* getPosPerson(int pos, int (*pstu)[4])// A function pointer , Functions that return pointers 
{
    
	int *p;
	p = (int *)(pstu+pos);// Two dimensional array address + The number entered is the corresponding array value , And then assign it to P
	return p;
}

int main()
{
    
	int scores[3][4]={
    
		{
    55,66,77,88},// Student 1
		{
    66,55,99,100},// Student 2
		{
    11,22,33,59},// Student 3
	};
	int *ppos;
	int pos;
	printf(" Please enter the number of students you need to see :0,1,2\n");
	scanf("%d",&pos);
	
	ppos = getPosPerson(pos, scores);// Get the address of the corresponding array 
	for(int i=0;i<4;i++){
    // Traverse the values in the small array and output 
		printf("%d ",*ppos++);//++ Represents an offset int Integer bytes 
	}
	return 0;
}

Output content
 Insert picture description here

The secondary pointer

#include <stdio.h>

void getPosPerson(int pos, int (*pstu)[4],int **ppos)// A function pointer , Functions that return pointers 
{
    
	*ppos = (int *)(pstu+pos);// The purpose of using secondary pointer is to directly modify MAIN Function ppos Value 
}

int main()
{
    
	int scores[3][4]={
    
		{
    55,66,77,88},
		{
    66,55,99,100},
		{
    11,22,33,59},
	};
	int *ppos;
	int pos;
	printf(" Please enter the number of students you need to see :0,1,2\n");
	scanf("%d",&pos);
	
	getPosPerson(pos, scores,&ppos);
	for(int i=0;i<4;i++){
    
		printf("%d ",*ppos++);
	}
	return 0;
}

Output content
 Insert picture description here

原网站

版权声明
本文为[Xiaohao programming]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207062221372808.html