【问题标题】:copy range of elements from an array to another array in C language用C语言将元素范围从数组复制到另一个数组
【发布时间】:2017-03-02 16:08:36
【问题描述】:

我想将元素范围从现有数组复制到新数组。它将有一个填充了 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[first];
  • *ptr &lt; &amp;id[last] 是类型错误。

标签: c arrays pointers code-composer


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2019-06-08
      • 1970-01-01
      • 2021-11-26
      • 2014-07-26
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多