函数指针编译错了
A. 那位大虾帮忙看下c语言的函数指针问题,下面的程序老是编译出错,小弟先谢过了
void main()
{
int max(int a,int b); 在main函数中 怎么能这么写呢,先将a,b定义
再初始化,然后才能用
如果你想声明的话,不要在函数体内声明,
放在main函数上边
int (*pmax)(); 这句话是什么意思,是函数指针吗,void* pmax;
int x,y,z;
pmax=max;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=(*pmax)(x,y);
printf("maxnum=%d",z);
}
B. C++语言指向函数的指针编译错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
void operate(int,int,int(*)(int ,int));
int max(int , int),min(int , int );
int a,b;
printf("Please input two numbers:\n");
scanf("%d %d",&a,&b);
operate(a,b,max);
system("pause");
return 0;
}
int max(int a,int b)
{
if(a>b)
return(a);
else
return(b);
}
int min(int a,int b)
{
if(a>b)
return(b);
else
return(a);
}
void operate(int x,int y,int(*fun)(int ,int ))
{
printf("%d\n",(*fun)(x,y));
}
C. 写了一段程序,目的是了解函数指针和指针函数。但编译出错,求帮助 主要是p=sums出错,程序如下
#include <stdio.h>
#define max 5
int *sums(int *a,int *b);
void main()
{
int a,b;
int *c;
int (*p)(int *a,int *b);// 应当写成int *(*p)(int *a,int *b);
b=getchar();
scanf("%d",&a);
printf("a=%d\n",a);
printf("b=%c\n",b);
p=sums;
c=(*p)(&a,&b);
printf("a+b=%d",*c);
}
int *sums(int *a,int *b)
{
int s; //建议改成static int s;
s=*a+*b;
return &s; //这个有问题,因为s是开设在堆栈中的,虽然有地址,但
//函数返回时s就会被废弃,栈中的空间也许会被别的函数使用
//所以有可能这个地址的数据已经被冲了
//应该把s定义成全局变量或静态变量就能正确返回值了
}
【运行结果】按照上面修改后输入'1'和2
1
2
a=2
b=1
a+b=51
D. C++函数指针,请问这里那里错了
调用函数的一般形式为: (* 指针变量名 ) ( 实参表 ) 使用函数指针变量还应注意以下两点:
a. 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。
b. 函数调用中 "(* 指针变量名 )" 的两边的括号不可少,其中的 * 不应该理解为求值运算,在此处它只是一种表示符号。
另外max里面a b并没有复制 局部参数和全局参数名字一样 但是这里用局部参数的,所以结果错误
E. 函数返回指针编译错误
L可以当数组一样用,可以用L[0]的方式访问
至于为什么出错,要看你的程序是怎么写的,请写出你的程序。
********************************************
L = (char*)malloc((n1+2)*sizeof(char));
改为
L = malloc((n1+2)*sizeof(char));
R = (char*)malloc((n2+2)*sizeof(char));
改为
R =malloc((n2+2)*sizeof(char));
int n1,n2,i,j; char* L,R;
改为
int n1,n2,i,j; char* L,*R;
F. gcc编译错误 一个关于函数指针的(C语言)
pmax=max;
这是什么!一个简单的问题你搞的N复杂, 是不是你的函数有什么特别的功能要求。
//这注释到没有问题,
试过了没有问题,只要不要第二行
[yi@localhost 桌面]$ gcc -o cc.out cc.c
[yi@localhost 桌面]$ chmod u+x cc.out
[yi@localhost 桌面]$ ./cc.out
input two numbers:
12
12
maxmum=12
G. 请问下面关于指向函数的指针的程序错在哪里,为什么在visual c++里编译错误,请高人指点
float (*pt)(float arr[],int n);
H. keil中结构体函数指针编译错误
lcd_write_data是进行寄存器操作,不能用指针,再写一个函数实现字符串
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
I. 下面的c++程序编译无错误运行有问题 老师说是函数指针有问题 求大神解答
额。。。。
你main()函数里面调用的LinkedListInit()根本没用啊
main里面定义了一个LinkList L,但是LinkedListInit()函数里面却用的是自己的局部变量
其他几个函数的形参都用的是L的引用,为啥初始化函数不用呢? >.<
这样就导致main函数里面的那个L根本没初始化,运行insert肯定有问题
J. C语言这个函数指针哪里错了
函数指针需要定义参数的。
只有很原始的编译器 才不检查函数指针的参数。
#include"stdio.h"
#include"math.h"
main()
{
double(*fun)(double);
doublex;
printf("pleaseenterX: ");
scanf("%lf",&x);
fun=sin;
printf("sin(%lf)=%lf ",x,fun(x));
fun=cos;
printf("cos(%lf)=%lf ",x,fun(x));
fun=tan;
printf("tan(%lf)=%lf ",x,fun(x));
}
另外 这里的输入需要是弧度值