如何模仿C ++"通过引用传递数组(指针)"在C?

时间:2015-07-23 13:24:08

标签: c++ c arrays

对于这个神秘的标题感到抱歉,我已经找到了答案,但找不到答案。无论如何,我试图将char数组传递给函数并修改数组内的指针。这是我在C ++中的意思的一个例子:

#include "stdio.h"
#include "string.h"

void fill(char*& destination, const char* const input, int size)
{
    memcpy(destination, input, size);
    destination += size;
}

void inner(const char* const string1, int size1)
{
    const int size2 = 8;
    char string2[size2] = "World!\n";

    char output[20];
    char* outputWriter = output;

    fill(outputWriter, string1, size1);
    fill(outputWriter, string2, size2);

    printf(output);
}

int main()
{
    inner("Hello ", 6); 
}

哪个输出Hello World!

这是我在C中的尝试:

#include "stdio.h"
#include "string.h"

void fill(char** const destination, const char* const input, int size)
{
    memcpy(destination, input, size);
    *destination += size;
}

void inner(const char* const string1, int size1)
{
    const int size2 = 8;
    char string2[size2] = "World!\n";

    char output[20];
    char (*outputWriter)[20] = &output;

    fill((char**)outputWriter, string1, size1);
    fill((char**)outputWriter, string2, size2);

    printf(output);
}

int main()
{
    inner("Hello ", 6); 
}

哪个输出_orld!,而且演员阵容不是很漂亮。

将这样一个指向数组的指针传递给函数的正确方法是什么,以便能够像C ++代码一样修改它?

1 个答案:

答案 0 :(得分:6)

这就是你所追求的:

#include "stdio.h"
#include "string.h"

void fill(char** destination, const char* const input, int size)
{
    memcpy(*destination, input, size);
    *destination += size;
}

void inner(const char* const string1, int size1)
{
    const int size2 = 8;
    char string2[size2] = "World!\n";

    char output[20];
    char* ptr = output;

    fill(&ptr, string1, size1);
    fill(&ptr, string2, size2);

    puts(output);
}

int main()
{
    inner("Hello ", 6);
}