功能不会更改值

时间:2017-10-02 16:14:59

标签: c

当我调用indexs()函数时,当函数完成时,值不会改变。 当函数index()运行时,它们会被更改,我该怎么做才能更新这么多值......

void indexs(int i , char *str,int indexStart,int indexEnd,int wordlen)
{
    int words = 1;
    int len = strlen(str);
    for (int j = 0; j < len; j++)
    {
        if (str[j] == ' ')
            words++;
    }
    if (i > 0 && i <= words)
    {
        words = 1;
        int k = 0;
        while (words != i)
        {
            if (str[k] == ' ')
                ++words;
            ++k;
            ++wordlen;
            if (words == i)
            {
                indexStart = k;
                while (str[k] != ' ' && k != (len-1))
                {
                    wordlen++;
                    k++;
                }
                indexEnd = k;
            }
        }
    }
    else
    {
        printf("The index dosen't exsist\n");
    }
}
char delete(char *str)
{

    int i, indexStart = 0, indexEnd = 0, wordlen = 0;
    printf("Enter the index of the word that you want to remove:  ");
    scanf("%d", &i);
    indexs(i, str,indexStart,indexEnd,wordlen);
......
}

2 个答案:

答案 0 :(得分:1)

在C中如果你想从函数中传递数据要么返回它,要么传递指向该变量的指针,如下所示:

void indexs(int i , char *str,int *pIndexStart,int *pIndexEnd,int wordlen)
{
...
*pIndexStart = 0; // Set the *contents* of the pointer, by putting a * before it
}

并将其称为:

int MyVariable, MyOtherVariable;
indexs(0, "hi", &MyVariable, &MyOtherVariable, 2);

&符号将指针传递给变量而不是变量值。

这是一个可以告诉您更多相关信息的网站:http://www.thegeekstuff.com/2011/12/c-pointers-fundamentals/

答案 1 :(得分:0)

当您通过按值调用调用您的函数时,因此值仅在函数索引()中更新,而不是在调用函数delete()中。 为了反映调用函数的变化,您需要通过传递指针(按引用调用)来传递这些参数。