iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

從0開始,一起學C語言吧!系列 第 28

從0開始,一起學C語言吧!(Day28)

Day28-函式的指標

那今天要講的是函式的指標
當一個指標指向一個函式時,可以間接使用指標呼叫該函式,而該函式指標的型態必須與函式的回傳型態相同
那我們來做個範例

#include<stdio.h>
#include<stdlib.h>
int add (int ,int);
int main(void){
	int ans,(*p) (int x,int y);
	p=add;
	ans=(*p)(3,4);
	printf("%d\n",ans);
	system("pause");
}
int add(int x,int y){
	return x+y;
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190929/20119958AAKZGQTISw.png
解釋:
宣告函式指標p,具兩個整數引數
將p指向函式add

接下來我們做個綜合練習
範例1:

#include<stdio.h>
#include<stdlib.h>
void myputs(char*);
int main(void){
	char *str="pointer is fun!";
	myputs(str);
	system("pause");
	return 0;
}
void myputs(char *s){
	while (*s != '\0'){
		printf("%c",*s);
		s++;
	}
	printf("\n");
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190929/20119958e18vEGKC7m.png
解釋:
系統有一puts()函式,接受一個指向字串之指標

範例2:

#include<stdio.h>
#include<stdlib.h>
void mystrcpy(char *,char *);
int main(void){
	int result;
	char word1[]="I like C";
	char word2[]="This is fun";
	mystrcpy(word1,word2);
	printf("word2=%s\n",word2);
	system("pause");
} 
void mystrcpy (char *str1,char *str2){
	int i;
	for(i=0;*(str1+i)!='\0';i++)
	   *(str2+i)=*(str1+i);
	*(str2+i)='\0';
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190929/20119958rkL9bIYk2l.png
最後別忘記要加\0字元,代表字串的結尾符號
範例3:

#include<stdio.h>
#include<stdlib.h>
void sub(char *,char ,char);
int main(void){
	char a,b,s[]="This is fun!";
	puts(s);
	printf("欲改變字串中的哪個字母,改為");
	scanf("%c %c",&a,&b);
	sub(s,a,b);
	puts(s);
	system("pause");
	return 0;
}
void sub(char *s,char a,char b){
	while (*s !='\0'){
		if(*s==a)
		*s=b;
	s++;
	}
}

印出:
https://ithelp.ithome.com.tw/upload/images/20190929/20119958ZAwSdLTKHz.png
那今天就到這拉謝謝大家今天的閱讀


上一篇
從0開始,一起學C語言吧!(Day27)
下一篇
從0開始,一起學C語言吧!(Day29)
系列文
從0開始,一起學C語言吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言