函數指針編譯錯了
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));
}
另外 這里的輸入需要是弧度值