标签:
用来演示指向函数的指针。
// 自增函数:将数值a加1并返回结果
int inc(int a)
{
return(++a);
}
// 乘法函数:用来将a,b两指针指向的数值相乘,并将结果存于c指针指向的空间
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in); //定义一个指定参数类型的函数指针类型FUNC1
typedef int(FUNC2) (int*,int*,int*); // 定义三个指定参数类型的函数指针类型FUNC2
void show(FUNC2 fun,int arg1, int*arg2)
{
FINC1 p=&inc; // 定义指向1个参数的函数指针p,并指向自增函数inc
int temp =p(arg1); // 调用处增函数p将arg1数值自增,并把结果存于temp,为10+1=11
fun(&temp,&arg1, arg2); // 调用传入的函数指针(实为multi),将temp,arg1数值相乘,结果存于arg2指向的空间,为10*11=110
printf("%d\n",*arg2); // 打印乘法结果110
}
main()
{
int a; // 定义变量a用于存储结果
show(multi,10,&a); // 调用函数show并传入三个参数:函数指针multi, 数值10,结果变量a的地址
return 0;
}
请找出下面代码中的所有错误 (题目不错,值得一看)
说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” #include"string.h" main() {
char*src="hello,world"; char* dest=NULL; int len=strlen(src);
dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--;
printf("%s",dest); return 0; } 答:
方法1:一共有4个错误; int main() {
char* src = "hello,world"; int len = strlen(src);
char* dest = (char*)malloc(len+1);//要为分配一个空间 char* d = dest; char* s = &src[len-1]; //指向最后一个字符 while( len-- != 0 ) *d++=*s--;
*d = 0; //尾部要加’\0’ printf("%sn",dest);
free(dest); // 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL; //防止产生野指针 return 0; }
方法2: (方法一需要额外的存储空间,效率不高.) 不错的想法 #include <stdio.h> #include <string.h> main()
{
char str[]="hello,world"; int len=strlen(str); char t;
for(int i=0; i<len/2; i++) { t=str;
str=str[len-i-1]; //小心一点 str[len-i-1]=t; }
printf("%s",str); return 0; }
(a++)*(a++) 禁止这样写
标签:
原文地址:http://www.cnblogs.com/zwei1993/p/5021911.html