静态变量在输入时存储什么值

What value does a static variable store when inputted into?

本文关键字:存储 什么 输入 变量 静态      更新时间:2023-10-16
#include<stdio.h>
char *getname()
{
    static char name[30];
    scanf("%s",name);
    return name;
}
void main()
{
    char * name1,*name2;
    name1 = getname();
    name2 = getname();
    printf("%s %sn",name1,name2);
}

输入: Jack Jill

输出: Jill Jill

我认为应该是Jack Jack,因为它存储了输入的初始值

name1name2指向同一个对象:name的第一个元素。

由于指针name1name2具有相同的值,因此在打印数组时得到相同的结果是正常的。

静态对象的生命周期是程序的整个执行过程,静态对象的地址在程序执行过程中不会改变。

在函数体内部声明为static的变量将在函数调用期间保持其值。但是,您仍然可以更改此值。

从本质上讲,静态变量(至少在这个上下文中)与全局变量相同,只是它不能被声明它的上下文中的代码"看到"。

所以,在你的函数中只有一个变量name,所以每次调用getname都会覆盖上次在name中的内容。因此,当您第二次调用它来获取Jill时,它会覆盖名称Jack

你可以这样做,例如:

char name1[30], name2[30];
strcpy(name1, getname());
strcpy(name2, getname());

但我更喜欢的解决方案是传递name变量:

char name1[30], name2[30];
getname(name1);
getname(name2);
然后去掉函数中的char name[30];,只剩下:
void getname(char *name)
{
   scanf("%s", name);
}

更容易,没有问题。

在这段代码中只有一个char数组。这是static数组,叫做name。每次调用getname时,用用户的输入填充name数组。然后返回指向该数组第一个元素的指针(char*)。将这些返回的指针存储在name1name2中。它们都指向同一个数组。因此,当您对name1name2分别进行printf时,您将得到相同的输出。也就是说,您将获得上次输入到name中的字符。

相关文章: