Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 在循环中声明变量_Memory_Declaration - Fatal编程技术网

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倍的内存,效率会有多低对于循环中的单个变量。