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);	
}

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章