C语言返回指针的函数,指针函数,让一个函数返回一个字符串

C语言函数返回指针的函数(指针函数)

什么是返回指针的函数

一个函数可以返回一个整形值
字符型值
实型值

1、如果一个函数它的返回值是一个地址(是一个指针的话),这个函数是一个返回值是指针即指针函数。
2、返回的是指针的函数是指针函数

注意函数指针和指针函数是不一样的概念
int (*p)(int,int);//这是是指向函数的指针(指针函数)

返回值为浮点类型,整数,字符

float aver(int a,int b,int c){//返回float类型的值
}
int sum(int a,int b){//返回int 类型的值
	return a+b;
}
char fun(char ff){返回char 类型的值
	...
}

如何定义返回指针的函数

语法
类型标识符  *函数名 (参数列表)
{
   	语句体;
}

在这里插入图片描述

#include<stdio.h>
//返回的是数组a中最大元素地址 
int *max(int a[],int n){
	int *p=a,i;
	for(i=1;i<n;i++){
		//值比较
		if(*p<a[i]){//地址复制  
			p=&a[i];//在整个循环的过程当中,p始终指向最大元素 得到其最大元素的地址值 
		}
	} 
	return p;
}
/*
p-------->10
		  34
		  44
		  56<-------p
		  45
*/
void main(){
	int a[5]={23,34,56,67,78};
	printf("%d\n",*max(a,5)); 
}

在这里插入图片描述

二级C语言考试案例

让一个函数返回一个字符串(如何让函数返回字符串
注意以下几点

1、字符串是地址(主要)
2、让一个函数返回一个字符串,实际就是让函数返回一个地址(即指针)
3、这个函数一定要定义成为返回指针的函数
4、返回字符串一般的个数:
格式:
char *函数名(参数){
代码;
return “字符串”;
}
5、以后要把char *p中的 *p

//为什么字符串是地址:
//解释:
char *p;
p="abcd";//既然能够把字符串abcd赋值给指针p那么就说明字符串abcd是地址

char p;p=‘字符’;//这时p里面只能赋予字符
char *p;p=“字符串”; //这时p里面可以放字符串
案例一、

#include<stdio.h> 
#include<string.h>
char *fun(char *p){
	p++;
	while(*p){//遍历传入字符串判断其字符串字符是否为\0 
		*(p-1)=*p;//将字符串前一个的值赋值给后一个 
		p++;//指针向后移动 
	}
	p-=2;//p=p-2 指针向上移动两个位置
	return p;//返回传入的字符串 
}
void main(){
	char str[100]={"abcde"},*save;
	save=fun(str);
	puts(save);//字符串在打印输出的时候直接赋予字符串的指针即可
} 

在这里插入图片描述
在这里插入图片描述
变换上述程序

#include<stdio.h> 
#include<string.h>
char *fun(char *p){
	char *t = p++;
	while(*p){//遍历传入字符串判断其字符串字符是否为\0 
		*(p-1)=*p;//将字符串前一个的值赋值给后一个 
		p++;//指针向后移动 
	}
	p-=2;//p=p-2 
	*p='\0';
	return t;//返回传入的字符串 
}
void main(){
	char str[100]={"abcde"},*save;
	save=fun(str);
	puts(save);
} 

在这里插入图片描述
在这里插入图片描述
案例二、

#include<stdio.h> 
#include<string.h>
//在删除一个字符串前后的*号 
char *fun(char *str){
	char *t=str + strlen(str)-1;
	while(*str && *str == '*') 
	str++;
	while(*t=='*')
		t--;
	*(t+1)='\0';
	return str; 
}
void main(){
	char str[100] = {"***a*bcd***"},*save;
	save=fun(str);
	puts(save);
}

在这里插入图片描述

熟悉以下算法

#include<stdio.h> 
#include<string.h>
//在删除一个字符串前后的*号 
char *fun(char *str){
	char *p1=str+strlen(str)-1,*p2=p1,save[100],*p3=save;
	while(p1>str){
		if(*p1>='a' && *p1<='z'){
			*p3++=*p1;
			*p2--=*p1;	
		}
		p1--;
	}
	*p3='\0';
	p3=save;
	while(p2>str){
		*p2--=*p3++;
	}
	return str;
}
void main(){	
	char str[100]={"a1b2c3d4e5"},*save;
	save=fun(str);
	puts(save);	
}

在这里插入图片描述
在这里插入图片描述

发布了26 篇原创文章 · 获赞 23 · 访问量 1983

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/104478279
今日推荐