购买主题
这一块听的有点蒙圈了
得好好捋一捋
假 鱼 老师 {:9_223:}
5-+ 结果 5- 134513251
5+- 结果 5+ 134513251
请问 134513251是怎么出来的
本帖最后由 zzxwbs 于 2017-2-18 02:37 编辑
Sboy 发表于 2017-1-18 10:38
假 鱼 老师
scanf第三个格式输入不正确,理论上来说第三个无法输入,有的编译器按照0来处理,有的编译器给一个固定的数字处理,还有int最大支持65535,再大就过界了也不能正常运算
这节有难度,硬骨头啊
{:10_266:}
{:10_299:}
#include <stdio.h>
int a,b,c;
void main()
{
int max(int,int);
int min(int,int);
int sum(int,int);
void process(int x,int y,int(*fun)());
printf("plsase input a&b:");
scanf("%d%d",&a,&b);
printf("max=");
process(a,b,max);
printf("min=");
process(a,b,min);
printf("sum=");
process(a,b,sum);
}
void process(int x,int y,int(*fun)())
{
c=max(a,b);
printf("%d\n",c);
c=min(a,b);
printf("%d\n",c);
c=sum(a,b);
printf("%d\n",c);
}
int max(int x,int y)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int min(int x,int y)
{
if(a<b)
{
return a;
}
else
{
return b;
}
}
int sum(int x,int y)
{
int add;
add=a+b;
return add;
}
高手们帮我看看上面程序,哪里错了!
你说错了吧为什么不可以返回局部变量的指针 ,明明可以返回,我只知道不可以返回局部变量的引用
#include<stdio.h>//二维数组名做参数
void main()
{
double *search (double a[],int n);double *re;
double score={{33,45,67,78},{8,5,67,89},{97,95,44,99}};
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
printf("%.2lf",score);
}
re=search (score,1);
for(i=0;i<4;i++)
{
printf("%lf\n",*(re+i));
}
}
double *search (double a[],int n)
{
double *ll;
ll=a;//二维数组中一维数组代表地址,代表二维数组中每一行的地址
return ll;
这个程序就是对的
}
咚咚咚咚咚咚咚···{:10_266:}
这敲键盘的声音每节课都听的我惊心动魄{:10_250:}
函数指针作为参数
#include <stdio.h>
int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);//此函数有三个参量,第一个参量是函数指针,第二、第三个是整型参数
int add(int num1, int num2)
{
return num1 + num2;
}
int sub(int num1, int num2)
{
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2)
{
return (*fp)(num1, num2);//参数num1、num2作为函数指针 fp 所指向的函数的输入参数;
}
int main()
{
printf("3 + 5 = %d\n", calc(add, 3, 5));//函数名add其实就是一个地址,直接作为函数指针使用
printf("3 - 5 = %d\n", calc(sub, 3, 5));
return 0;
}
---------------------------------------------------------------------------------------------------------------
函数指针作为返回值
int (*select(char op))(int, int);//首先这是一个函数指针,指向有两个int变量的函数,其所指向的函数地址由指针函数*select(char op) 获得
int (*select(char op))(int, int)
{
switch(op)
{
case '+': return add;
case '-': return sub;
}
}
int main()
{
int num1, num2;
char op;
int (*fp)(int, int);
printf("请输入一个式子(如:1+2):");
scanf("%d%c%d", &num1, &op, &num2);
fp = select(op);
printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
return 0;
}
不知道这样理解对不对
总感觉 select 与 calc 有哪里功能是重复的,有点绕
打卡
{:10_292:}
{:10_327:}{:10_265:}{:10_284:}{:10_291:}蒙圈了 我听完就忘 自己分析又分析不出来{:10_266:}{:10_266:}{:10_266:}
{:10_266:}{:10_266:}{:10_266:}码住 再看看视频理解理解
魔鬼{:10_266:}{:10_266:}{:10_266:}
#include<stdio.h>
int add(int, int);
int sub(int, int);
int cal(int(*p)(int ,int),int, int) ;
int(*p(char ))(int ,int);
int add(int a,int b)
{
return a + b;
}
int sub(int a,int b)
{
return a-b;
}
int cal(int(*p)(int,int),int a,int b)
{
return p(a,b);
}
int(*p(char c))(int a ,int b)
{
switch(c)
{
case '+':return add;
case '-':return sub;
}
}
int main(void)
{
printf("please input a presentation,such as (a-b)");
int a,b;
char c;
scanf("%d%c%d",&a,&c,&b);
int (*fp)(int ,int);
fp = p(c);
printf("%d %c %d = %d",a,c,b,cal(fp,a,b));
return 0;
}
已有 25 人购买 本主题需向作者支付 5 鱼币 才能浏览