Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中通过其他过程使用变量_C_Function_Procedure - Fatal编程技术网

在C中通过其他过程使用变量

在C中通过其他过程使用变量,c,function,procedure,C,Function,Procedure,我有这个: void insideword(char *str, int wordstart, int contador, char **args, int word, int inword, int lenstr) { if (detectpattern(str[contador])) { inword = 0; str[contador] = '\0'; args[word] = &

我有这个:

    void
    insideword(char *str, int wordstart, int contador, char **args, int word, int inword, int lenstr) {
        if (detectpattern(str[contador])) {
            inword = 0;
            str[contador] = '\0';
            args[word] = &str[wordstart];
        }
        if (contador == lenstr-2) {
            args[word] = &str[wordstart];   
        }   
    }

    int
    mytokenize(char *str, char **args, int maxargs) {
        int contador;
        int inword;
        int wordstart;
        int word;
        int lenstr;

        contador = 0;
        wordstart = 0;
        inword = 1;
        word = 0;
        lenstr = (strlen(str)-1);

        while (str[contador] != '\0')
        {
            if (inword == 1) {
                insideword(str, wordstart, contador, args, word, inword, lenstr);
                printf("%i", inword);
            } 
            contador++;
        }
    }
嗯。。。我的程序运行不正常。如果我在insideword之前打印“inword”,inword总是1,并且从不被insideword proc修改

如果我在insideword proc中打印它,就在inword=0之前,但它不返回值0


谢谢现在,您通过值传递
inword
(来自
mytokenize
),即
insideword
inword
参数有自己的内存,并从
mytokenize
获取
inword
的一个副本(它的两个不同变量,只有相同的名称,但它们彼此不相关)。如果修改
insideword
inword
,则只修改副本,而不修改原始变量

如果希望
inword
参数(对于
insideword
)与
mytokenizer
中的
inword
是“同一变量”,则需要使用指针“通过引用传递”:

insideword
的参数列表中将
int-inword
更改为
int*inword

此外,您需要将
mytokenize
中对
insideword
的调用更改为:

insideword(str、wordstart、contador、args、word和inword、lenstr)

由于
inword
是一个变量,但函数使用指针作为参数,因此需要使用
传递
inword
的地址

如果通过引用传递,则参数不会获得副本,而是从
mytokenizer
中“指向”与
inword
相同的内存,并且
mytokenizer
inword
可以看到您的写入。但是,您需要先解除对指针的引用,然后才能对其进行写入:

inword=0
更改为
inword=0
in
insideword


如果不通过
*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为

现在,您通过值传递
inword
(来自
mytokenize
),即
insideword
inword
参数有自己的内存,并从
mytokenize
获取
inword
的副本(它的两个不同变量,只有相同的名称,但它们彼此不相关)。如果修改
insideword
inword
,则只修改副本,而不修改原始变量

如果希望
inword
参数(对于
insideword
)与
mytokenizer
中的
inword
是“同一变量”,则需要使用指针“通过引用传递”:

insideword
的参数列表中将
int-inword
更改为
int*inword

此外,您需要将
mytokenize
中对
insideword
的调用更改为:

insideword(str、wordstart、contador、args、word和inword、lenstr)

由于
inword
是一个变量,但函数使用指针作为参数,因此需要使用
传递
inword
的地址

如果通过引用传递,则参数不会获得副本,而是从
mytokenizer
中“指向”与
inword
相同的内存,并且
mytokenizer
inword
可以看到您的写入。但是,您需要先解除对指针的引用,然后才能对其进行写入:

inword=0
更改为
inword=0
in
insideword


如果不通过
*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为

现在,您通过值传递
inword
(来自
mytokenize
),即
insideword
inword
参数有自己的内存,并从
mytokenize
获取
inword
的副本(它的两个不同变量,只有相同的名称,但它们彼此不相关)。如果修改
insideword
inword
,则只修改副本,而不修改原始变量

如果希望
inword
参数(对于
insideword
)与
mytokenizer
中的
inword
是“同一变量”,则需要使用指针“通过引用传递”:

insideword
的参数列表中将
int-inword
更改为
int*inword

此外,您需要将
mytokenize
中对
insideword
的调用更改为:

insideword(str、wordstart、contador、args、word和inword、lenstr)

由于
inword
是一个变量,但函数使用指针作为参数,因此需要使用
传递
inword
的地址

如果通过引用传递,则参数不会获得副本,而是从
mytokenizer
中“指向”与
inword
相同的内存,并且
mytokenizer
inword
可以看到您的写入。但是,您需要先解除对指针的引用,然后才能对其进行写入:

inword=0
更改为
inword=0
in
insideword


如果不通过
*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为

现在,您通过值传递
inword
(来自
mytokenize
),即
insideword
inword
参数有自己的内存,并从
mytokenize
获取
inword
的副本(其两个区