[英]Save pointer passed to function to array in C
我觉得这很难解释,但我会尽力而为。 我正在将数组传递给函数。 我希望能够在函数中获取数组的指针,并将数组的值放回函数中的数组。
如果那没有意义,也许这段代码会让您了解我要尝试的工作。
#define LENGTH 3
void FIR(short *filter) {
short temp[LENGTH] = {*filter, *(filter+1), *(filter+2)};
}
int main() {
short filter[LENGTH] = {1,2,5};
FIR(filter);
}
这段代码有效,但是如果过滤器长度很长,那是很荒谬的。 如何针对任何长度的过滤器阵列执行此操作? 请记住,我正在努力保持效率。
使用循环, *(filter+x
)等同于filter[x]
#include <stdio.h>
#define LENGTH 3
void FIR(short *filter) {
short temp[LENGTH];
int i;
for(i = 0; i < LENGTH; ++i){
temp[i] = filter[i];
}
}
int main() {
short filter[LENGTH] = {1,2,5};
FIR(filter);
int i;
for(i = 0; i < LENGTH; ++i){
printf("%d ", filter[i]);
}
}
您可以使用循环来使代码看起来不错,也可以仅使用memcpy()复制整个数组。
void FIR(short *filter)
{
short temp[LENGTH];
int i=0;
for(i=0;i<LENGTH;i++)
temp[i] = filter[i];
// or memcpy(temp,filter,sizeof(short) * LENGTH);
}
由于您谈论效率,因此请选择后一种方法,即memcpy()
最有效的方法可能是memcpy。 因为您知道数组的类型和大小。
#define LENGTH 3
void FIR(short *filter) {
short temp[LENGTH];
memcpy(temp, filter, sizeof(short)*LENGTH)
}
您可以使用memcpy()
,也可以在循环中初始化本地数组。 例如,
void FIR(short *filter) {
short temp[LENGTH];
memcpy(temp, filter, LENGTH * sizeof(short));
}
要么
void FIR(short *filter) {
short temp[LENGTH];
int i;
for (i = 0; i < LENGTH; i += 1) {
temp[i] = filter[i];
}
}
除了memcopy()
,一种方法是使用指针:
void FIR(short *filter)
{
short temp[LENGTH], *tempP;
int i = 0;
tempP = temp;
while(LENGTH > i++) *tempP++ = *filter++;
}
如果您希望长度是可变的,请使用此
#include <stdio.h>
void FIR(short *filter, int length) {
short *temp = new short[length];
int i;
for(i = 0; i < length; ++i){
temp[i] = filter[i];
}
}
int main() {
short filter[3] = {1,2,5};
FIR(filter, 3);
int i;
for(i = 0; i < 3; ++i){
printf("%d ", filter[i]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.