使用指针创建函数(对编码非常陌生)

Create function using pointers (very new to coding)

我书里的问题是: 函数:

void int_concat (int * i1, const int * i2, unsigned int n, unsigned int pos);

将一个字段与 i2 中的 n 个整数连接到字段 i1 中的位置“pos”。 使用指针实现 int_concat 函数,您不能使用索引。您的 解决方案也不得使用任何标准函数。

一个答案是:

void int_concat (int *i1, const int *i2, unsigned int n, unsigned int pos)
{
 int *insert = i1 + pos;
 while ( n-- )
 {
 *insert++ = *i2++;
 }
}

我好像不能理解他们了*insert++ = *i2++;。 我认为我唯一理解的是 int *insert = i1 + pos; 创建放置 n 个整数的地址。谁能解释一下..

下面是代码的工作原理!

正如你所说,int *insert = i1 + pos; 是数组 i1 中的地址,其中数字将从 i2 添加。

暂时,它会简单地循环直到 n = 0,他们的写法等同于:

    while(n>0)
    {
        n-=1;
        //Do smth
    }

现在为实际

*insert++ = *i2++;

所以这里发生的是你引用位置 insert 的值,并使它等于 i2。之后你增加两个指针,因此这一行可以写成:

*insert = *i2;
insert++;
i2++;

下面是完整的代码,写的比较全面

    void int_concat(int *i1, const int *i2, unsigned int n, unsigned int pos)
    {
        // This is the fixed position
        int *insert = i1 + pos;
        while(n>0)
        {
            n-=1;
            *insert = *i2;
            insert++;
            i2++;
        }
    }

现在,如果您还在苦苦挣扎,让我做一个示例应用程序:

这里说的是i1 = [1,2,3]

这里是 i2 = [4,5,6]

假设pos为1,n=2;

因此代码会将 i1 更改为:[1,4,5] 因为 i2 中的值 a pos = 1 等于 4。但是由于 n = 2它将增加 inserti2 的位置,因此值 5 将放在 i1.