gpt4 book ai didi

c - 关于C中循环中函数(参数)的范围

转载 作者:行者123 更新时间:2023-11-30 16:48:23 25 4
gpt4 key购买 nike

我有一个关于 C 语言中参数范围的问题。我是 C 语言新手,一直在解决一个问题,在我苦苦挣扎之后,一位助教给了我一个函数 getline()

int main(void) {

printf("Type a string, then hit enter\n");
printf("You may type strings after an enter, but you must hit enter again to record the new string\n");
fflush( stdout );
int len;
char line[Limit];


while((len=getline(line,Limit))>0)
{
reverse(line);
printf("%s",line);
}
}

其中调用函数 getline() 定义为:

int getline(char s[], int lim){
int i,c;
for(i=0;i<lim-1 &&((c=getchar())!=EOF) && (c !='\n');++i)
s[i]=c;

if(c== '\n')//if c is a newline
{
s[i]=c;
++i;
}
s[i]= '\0';
return i;
}

因为 char line[limit] 在 while 条件下被传递到 getline() 中。 getline() 确实适用于 line[] 并更改其值。

我的问题是,一旦循环迭代完成,当在 while 循环中再次调用 getline() 时,它是否仍保留第一次迭代的值,还是会重置?

我知道退出 while 循环后 line[] 为空,但我想知道它在循环本身中的细微差别。

例如,如果我输入标准输入:

"Hello\n
"How are you\n"

line[]="Hello\n\0"getline() 完成 while 循环的第一次迭代时。当迭代 2 中再次调用 getline() get 时,是 line[]="Hello\n\0" 吗? (假装反向不存在)并被覆盖或者是 line[]="\0"

如果反向不存在(使得一个字符串是否更长与打印无关)并且我输入了

"How are you\n
Hello\n"

line[]="Hello\n\0you\n\0"吗?在 while 结束之前的第二次迭代之后?

最佳答案

Since char line[limit] gets passed into getline() in the while condition. getline() does work on line[] and changes it's value. My question is once on iteration of the loop is done, when getline() is called again in the while loop, does it still retain it's value from the first iteration or does it get reset?

Array line 在循环外部声明。它最内层的封闭 block 是函数 main() 的整体;它的生命周期是从声明到该 block 的末尾。在该生命周期内,声明的标识符 line 始终指定同一对象,并且该对象保留其值,除非该值可能由程序显式修改。特别是,如果使用初始值设定项声明数组,则该初始值设定项只会在数组首次存在时应用一次。

因此,line 数组确实会从循环的一次迭代到下一次迭代保留其值。然而,循环的每次迭代中要做的第一件事是测试循环条件,这需要调用 getline() ,这会修改该数组的部分或全部元素。因此,循环体中的语句将在每次迭代时看到新的数组内容。

关于c - 关于C中循环中函数(参数)的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42981514/

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