一直对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],看了半天也没看出来哪里类型不兼容?
|