一直對C語言指針比較陌生,最近在開始了解指針,寫了個簡單代碼(不實現任何功能,純粹是測試指針用法)想測試下自己寫的對不對,但是編譯后,錯誤是沒有,但總是有警告。
雖然沒有錯誤,但本著追求完美的宗旨,總是想搞清楚警告的原因,但找來找去,沒發現兩者指針類型不同啊,不都是unsigned short嗎?
對指針實在是了解不多,望大神指點,如下是代碼:
#include <atmel_start.h>
unsigned short adcacq0(int); //函數聲明
unsigned short adcacq1(int); //函數聲明
unsigned short (*adcacq)(int)=adcacq1; //函數指針變量聲明,同時賦初值
unsigned short adcacq2(unsigned short(*adcacq)(int),int); //函數聲明,函數指針傳遞參數
int main(void)
{
while (1)
{
adcacq2(adcacq0,9);
adcacq2(adcacq1,8);
}
}
unsigned short adcacq2(unsigned short(*adcacq)(int),int x) //此函數里的代碼總是有警告
{
unsigned short *Q=0, a=1;
Q=adcacq;
return (*Q+a);
}
unsigned short adcacq0(int acq)
{
int a=0,b=0,c=0;
a=b+c;
return a;
}
unsigned short adcacq1(int swc)
{
int d=0,e=0,f=0;
d=e+f;
return d;
}
編譯后沒有錯誤,但總是有警告消不掉:
assignment from incompatible pointer type [-Wincompatible-pointer-types],看了半天也沒看出來哪里類型不兼容?
|