设void f1(int* m, long &n); int a; long b; 则引用f1(a,b)是否正确?
时间: 2024-03-20 13:45:10 浏览: 12
在调用函数 f1 时,我们需要传入一个 int 类型的指针和一个 long 类型的引用。所以,可以通过将变量 a 的地址作为第一个参数,变量 b 的引用作为第二个参数,来正确地调用函数 f1,即:
```
f1(&a, b);
```
这里需要注意的是,对于第二个参数,在使用时需要注意确保传入的是一个 long 类型的变量或对象的引用。如果传入的不是 long 类型,就会出现编译错误。
相关问题
设void f1(int * m,long & n);int a;long b;则以下调用合法的是()。
调用1:`f1(&a, b);`
这个调用是合法的,因为 `&a` 是 `int*` 类型(指向 `a` 变量的指针),`b` 是 `long&` 类型(`n` 的别名),类型与函数参数匹配。
调用2:`f1(&a, a);`
这个调用是不合法的,因为第二个参数应该是 `long&` 类型,而 `a` 是 `int` 类型。
调用3:`f1(&b, b);`
这个调用是不合法的,因为第一个参数应该是 `int*` 类型,而 `b` 是 `long` 类型。
调用4:`f1(&b, a);`
这个调用是不合法的,因为第一个参数应该是 `int*` 类型,而 `b` 是 `long` 类型,第二个参数应该是 `long&` 类型,而 `a` 是 `int` 类型。
#include <stdio.h> #include <math.h> #define pi 3.1415 #define N 11 //N为滤波器的阶数+1 #define LEN 512 int inputdata[LEN]; //假设数据的长度为512 int outputdata[LEN]; long int yn; const int B[N] = {166, 0, -1374, 0, 9453, 16279, 9453, 0, -1374, 0, 166}; int main(void) { int f1,f2,fs,i,j,n; int *a; f1=100; //频率分量1(Hz) f2=300; //频率分量2(Hz) fs=800; //采样频率(Hz) for(n=0;n<LEN;n++) { inputdata[n]=sin(2*pi*f1*n/fs) + sin(2*pi*f2*n/fs); //产生信号 } for(j=0;j<LEN;j++) //根据公式来进行滤波 { a=&inputdata[j]; yn=0; for(i=0;i<N;i++) { yn=yn+B[i]*(*a++); } outputdata[j]=yn>>16; //滤波后信号 } while(1); } 分别修改此低通FIR滤波器为高通、带通、带阻滤波器
1. 高通FIR滤波器:
将原始滤波器的系数数组B中的所有偶数项变为负数即可。修改后的系数数组B为:
const int B[N] = {-166, 0, 1374, 0, -9453, 16279, -9453, 0, 1374, 0, -166};
2. 带通FIR滤波器:
在高通滤波器的基础上再添加一个低通滤波器,将两个滤波器的输出相加即可。修改后的系数数组B为:
const int B[N] = {83, 0, -687, 0, 4727, -8129, 4727, 0, -687, 0, 83};
3. 带阻FIR滤波器:
将带通滤波器的系数数组B中的奇数项变为负数即可。修改后的系数数组B为:
const int B[N] = {-83, 0, 687, 0, -4727, 8129, -4727, 0, 687, 0, -83};