2

我想将元素范围从现有数组复制到新数组。它将有一个填充了 ID 的本地整数数组(只是随机数)。它还有一个全局空数组,其元素数量与本地数组相同。我的程序包含一个函数,它将本地数组的条目范围复制到全局数组。这个函数将是:

void func(int *ptr, int first, int last);

ptr 指针将用于本地数组的起始地址。first指示复制开始的位置。last指示复制结束的位置。顺便说一句,我正在使用代码编写器并使用 MSP430。这是我的代码,

#include <msp430.h> 

int g_id[11];
int *ptr;
int *p;


int main(void) {

    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
    
    int id[11]={5,0,1,8,3,5,1,4,0,9,1};
    int first = 3;
    int last= 8;
    ptr = id;
    p = g_id;

    for(ptr=&id[first]; *ptr < &id[last]; ptr++)
        {
            *p = *ptr;
            p++;         
        }

    while(1);
}

g_id 是全局数组,但我不知道。

最后一个不起作用,第一个是 3,程序跳转到 3 个值并从 8 开始。(8,3,5,1,4,0​​,9,1,0,0,0)但我想看看(0 ,0,0,8,3,5,1,4,0​​,0,0)

4

2 回答 2

1

为了更好地理解它,使用索引而不是指针:

for (int i = first; i <= last; i++) {
    g_id[i] = id[i];
}

否则:

for (p = &g_id[first], ptr = &id[first]; ptr <= &id[last]; ptr++, p++) {
    *p = *ptr;
}
于 2017-03-02T16:16:09.123 回答
0

你正在设置p = g_id. 如果您希望副本转到匹配的位置,则必须在本地和全局数组上设置匹配的偏移量。

int *src, *dst;

for (src = id + first, dst = g_id + first; src <= id + last; src++, dst++) {
    *dst = *src;
}
于 2017-03-02T16:14:47.657 回答