如何更改C中传递给函数的部分参数?

如何更改C中传递给函数的部分参数?,c,string,loops,C,String,Loops,我有功能 Oled_徽标(常量无符号字符*图像) 所以如果我通过 无符号字符, 0x0f,0x1f,0x1f,0x3f,0x7f,0xff,0} e、 g.- Oled_标志(giphy_0) 它起作用了 但我得到了14张这样的图片,命名为“giphy_0,giphy_1…”。。。giphy_14 所以我想一个接一个地运行这些程序来获得动画 我只想把参数传递给Oled_logo,比如Oled_logo(giphy_0)或Oled_log(giphy_1)或Oleg_logo(giphy_2),所

我有功能

Oled_徽标(常量无符号字符*图像)

所以如果我通过

无符号字符, 0x0f,0x1f,0x1f,0x3f,0x7f,0xff,0}

e、 g.-

Oled_标志(giphy_0)

它起作用了

但我得到了14张这样的图片,命名为“giphy_0,giphy_1…”。。。giphy_14

所以我想一个接一个地运行这些程序来获得动画


我只想把参数传递给Oled_logo,比如Oled_logo(giphy_0)或Oled_log(giphy_1)或Oleg_logo(giphy_2),所以我想在循环中调用Oled_logo函数,并在循环中更改参数giphy_imagenumber的一部分

因此,我不想编写代码来调用Oled\u logo函数14次,而是想要一个循环,在这个循环中,我将giphy\u imagenumber传递给functionOled\u logo,这个imagenumber被循环变量替换,所以我只需要在循环中写几行。 我试过了

unsigned char x[] = "giphy_0";
    volatile unsigned char y ;
    while(1)
    {
        for(int image_gif = 0 ; image_gif<=14;image_gif++)
        {

            x[6] = image_gif + 0x30;

        Oled_logo(x);

        ssd1306_UpdateScreen();
        HAL_Delay(4000);
        }
}
无符号字符x[]=“giphy_0”;
易失性无符号字符y;
而(1)
{

对于(int image_gif=0;image_gif
{0x80、0x81、0x03、0x07、0x0f、0x1f、0x1f、0x3f、0x7f、0xff、0}

不同于

“giphy\u 0”

你试图达到的目标似乎是错误的,或者你错过了一部分


我猜你想要一个像
{giphy_0,giphy_1,…}
,然后使用该数组中的索引。

您试图做的是传入一个带有相关变量名称的字符串,希望程序自动将该字符串替换为该名称变量的内容。这不是C的工作方式

这里真正的问题是如何定义数组。与其拥有一组名称包含数组编号的数组,不如:

unsigned char giphy_0 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
unsigned char giphy_1 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
unsigned char giphy_2 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
...
unsigned char giphy_14 [] = { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 };
创建一个数组:

unsigned char giphy[][11] = {
    { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
    { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
    { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
    ...
    { 0x80, 0x81, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7f, 0xff, 0 },
};
并将回路穿过外部尺寸:

    for(int image_gif = 0 ; image_gif<=14; image_gif++)
    {
        Oled_logo(giphy[image_gif]);

        ssd1306_UpdateScreen();
        HAL_Delay(4000);
    }

<代码> >(int IVIGEIGIF=0;IMAGEIGIG)记住它是一个字符数组,所以从0到9,当它是10、11、12、13和14时,它将是好的,它将考虑ASCII表中的特殊字符。我修改了代码并在本地尝试。如果您这样改变它,它将是好的。STD::Strase=“GiPHia+”ToString(IMAGEIGIF);然后将s传递给Oled_log函数。请尝试此操作。变量名仅在编译时存在,因此在运行时无法解决此问题。更改数组类型是一个选项吗?这显然应该声明为数组数组或数组指针数组。您需要指向这些数组的指针数组。然后,您可以获得一个p根据数字,从新阵列指向其中一个giphy阵列。@rootconda在Ci中工作吗?只想将参数传递给Oled_徽标,如Oled_徽标(giphy_0)或Oled_log(giphy_1)或Oleg_徽标(giphy_2),所以我不想在循环中调用Oled_徽标函数,而是在循环中更改参数giphy_imagenumber的一部分