函数指针
函数指针用来存放函数的地址,这个地址是一个函数的入口地址
函数名代表了函数的入口地址
函数指针变量说明的一般形式如下
**<数据类型>(*<函数指针名称>)(<参数说明列表>);**
例如
#include <stdio.h>
int add(int a, int b) {
return a+b;
}
int sub(int a, int b) {
return a-b;
}
int mul(int a, int b) {
return a*b;
}
int main(int argc, char *argv[])
{
int m = 10, n = 20;
int (* p)(int, int);
p = add;
//printf("%d\n", add(m, n));
printf("%d\n", (*p)(m, n));
p = sub;
printf("%d\n", (*p)(m, n));
return 0;
}
编写一个指针函数,删除一个字符串中的空格
#include <stdio.h>
#include <string.h>
char *del_space(char *str);
int main()
{
//char str[] = " h h h h ";
char str[20];
char *s;
gets(str);
s = del_space(str);
puts(str);
return 0;
}
char *del_space(char *str)
{
char *r = str;
char *p = str;
while(*str != '\0')
{
if(*str == ' '){
str++;
}else{
*p = *str;
p++;
str++;
}
}
*p = '\0';
p = r;
return p;
}
编写一个指针函数,实现字符串连接
#include <stdio.h>
#include <string.h>
char *mstrcat(char * dest,const char *src);
//编写一个指针函数,实现字符串连接
int main(int argc,char *argv[])
{
char dest[30]="sbbcdhcbd";
char src[] = "lilili";
puts(mstrcat(dest,src));
puts(dest);
return 0;
}
char *mstrcat(char * dest,const char *src)
{
char *r = dest;
while(*dest){
dest++;
}
while(*src){
*dest = *src;
dest++;
src++;
}
*dest = '\0';
/*
简洁写法
char *r = dest;
while(*dest++);
dest--;
while(*dest++ = *src++);
return r;
*/
return r;
}
整数转化字符串
#include <stdio.h>
char * itoa(char *p,int n);
int main(int argc,char *argv[])
{
int n;
char s[20],*r;
printf("input a number:");
scanf("%d",&n);
r = itoa(s,n);
puts(r);
puts(s);
return 0;
}
char *itoa(char *p,int n)
{
int a,i = 0,j;
while(n){
a = n % 10;
n = n / 10;
p[i] = a + '0';
i++;
}
p[i] = '\0';
j = i - 1;
i = 0;
while(i < j){
a = p[i];
p[i] = p[j];
p[j] = a;
i++;
j--;
}
return p;
}
调用C库中的sqort函数来实现整型数组的排序
#include <stdio.h>
#include <stdlib.h>
//固定写法
int compare(const void *,const void *);
int main(int argc,char *argv[])
{
int s[] = {2,44,21,32,455,23};
int n,i;
n = sizeof(s) / sizeof(int);
qsort(s, n, sizeof(int), compare);
for(i = 0;i < n;i++){
printf("%d ",s[i]);
}
puts("");
return 0;
}
int compare(const void *p,const void *q )
{
return (*(int *)p - *(int *)q);
}