C语言将一个数组的元素范围复制到另一个数组

copy range of elements from an array to another array in C language

我想将元素范围从现有数组复制到新数组。它将有一个本地整数数组,其中填充了一个 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 是全局数组,但我想不通。

last 不起作用,first 是 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 )

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

int *src, *dst;

for (src = id + first, dst = g_id + first; src <= id + last; src++, dst++) {
    *dst = *src;
}

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

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;
}