gpt4 book ai didi

c - 通过 C 中的其他过程使用变量

转载 作者:太空宇宙 更新时间:2023-11-04 07:05:58 24 4
gpt4 key购买 nike

我有这个:

    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 )按值,即参数 inwordinsideword有自己的内存并获得 inword 的副本来自 mytokenize (它的两个不同的变量,只是具有相同的名称——但两者彼此不相关)。如果修改inwordinsideword您只修改副本而不修改原始变量。

如果你想要inword参数(对于 insideword )与 inword 是“相同的变量”来自 mytokenizer ,您需要使用指针“通过引用传递”:

Change int inword to int *inword in parameter list of insideword.

此外,您需要将调用更改为 insidewordmytokenize到:

insideword(str, wordstart, contador, args, word, &inword, lenstr);

因为 inword是一个变量,但该函数使用指针作为参数,您需要传递 inword 的地址使用 & .

如果通过引用传递,则参数不会获得副本,而是“指向”与 inword 相同的内存来自 mytokenizer inword 可以看到你的文章的 mytokenizer .但是,您需要在写入之前取消引用指针:

Change inword = 0 to *inword = 0 in insideword

如果您不通过 * 取消引用你的代码仍然会编译。但是写入并没有对指针指向的变量完成,而是更改了指针的地址,导致了一个危险的悬空指针,并可能导致未定义的行为!

关于c - 通过 C 中的其他过程使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32932870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com