Memory 在循环中声明变量
我想知道,当你在循环中声明一个变量时,它在循环中的内存地址是否相同?为什么会这样?在循环之后,如果我再次声明它,它有另一个内存地址 如果它有相同的地址,我怎么能这样做Memory 在循环中声明变量,memory,declaration,Memory,Declaration,我想知道,当你在循环中声明一个变量时,它在循环中的内存地址是否相同?为什么会这样?在循环之后,如果我再次声明它,它有另一个内存地址 如果它有相同的地址,我怎么能这样做 `char *p[100] cin>>n; for(i=0;i<n;++i) {char b[100]; cin>>b; p[i]=b; }` `char*p[100] cin>>n; 对于(i=0;i>b; p[i]=
`char *p[100]
cin>>n;
for(i=0;i<n;++i)
{char b[100];
cin>>b;
p[i]=b;
}`
`char*p[100]
cin>>n;
对于(i=0;i>b;
p[i]=b;
}`
最后,当我想显示p[i]的值,但b有相同的地址,并且我在p[i]中有相同的地址时。如果没有dinamic内存分配,这怎么办?可以这样做?如果在循环中声明一个变量,它的内存只分配一次,它的值在循环过程中可能会更改,但不会更改地址,这就是为什么它会显示相同的内存。 若在循环后再次声明它,那个么这个变量不在循环的作用域中,C中的变量有块作用域。然后它被视为新变量,并为它分配新内存 阅读有关变量范围的更多信息。
为什么内存在循环中保持不变?这是编译器优化还是通常的行为?编译器不会每次声明时都声明它?为什么它会在相同的位置声明?它这样设计是因为它不需要。你可以想象,如果它分配1000倍的内存,效率会有多低对于循环中的单个变量。