静态变量在输入时存储什么值
What value does a static variable store when inputted into?
#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,因为它存储了输入的初始值
name1
和name2
指向同一个对象:name
的第一个元素。
由于指针name1
和name2
具有相同的值,因此在打印数组时得到相同的结果是正常的。
静态对象的生命周期是程序的整个执行过程,静态对象的地址在程序执行过程中不会改变。
在函数体内部声明为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*
)。将这些返回的指针存储在name1
和name2
中。它们都指向同一个数组。因此,当您对name1
和name2
分别进行printf
时,您将得到相同的输出。也就是说,您将获得上次输入到name
中的字符。
相关文章:
- 在reactor中存储eventHandlers的最佳方式是什么
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 存储变量的更有效方法是什么?
- 如果与memory_order_acquire一起存储会发生什么
- std::atomic_flag不提供加载或存储操作有什么缺点吗?(自旋锁定示例)
- 如果我在 C++ 中为 int 提供双精度,输入缓冲区中存储了什么?
- C++标准对局部变量的存储和分配有什么保证?
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 告诉编译器我希望变量始终存储在寄存器中的正确方法是什么
- 什么是在C 中存储结果INT*的最佳数据类型
- 存储具有许多变体的类的默认值的推荐方法是什么?
- 存储数据列表并自动分配给结构的最佳方法是什么
- 在未分配某些元素的数组中存储了什么值
- 如果未存储由功能返回的指针,会发生什么
- 访问和存储/解析性std :: Chrono ::持续时间:: milliseconds(cpprest)时使用什么类型
- C++ - 函数中的局部指针变量具有什么类型的存储持续时间以及它们存储在哪里?
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 在这种情况下,"使用"在做什么,正在存储什么?
- 静态变量在输入时存储什么值