在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
ininsideword
如果不通过*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为 现在,您通过值传递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
ininsideword
如果不通过*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为 现在,您通过值传递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
ininsideword
如果不通过*
反引用,代码仍将编译。但是并没有写入指针指向的变量,而是更改了指针的地址,导致指针悬空,这是危险的,可能会导致未定义的行为 现在,您通过值传递inword
(来自mytokenize
),即insideword
的inword
参数有自己的内存,并从mytokenize
获取inword
的副本(其两个区