for循环正在初始化三个变量

时间:2019-03-08 09:59:46

标签: c for-loop

我怀疑为什么3个变量wstart = wend = start;用来初始化循环。如果这些变量中任何一个的值发生变化,都会改变两个变量的值?

void reverseletter(char str[], int start, int end) {               
    int wstart, wend; 
    for (wstart = wend = start; wend < end; wend++) { 

        if (str[wend] == ' ') 
            continue; 

        // Checking the number of words 
        // present in string to reverse 
        while (str[wend] != ' ' && wend <= end) 
            wend++; 
        wend--; 

        //Reverse the letter 
        //of the words 
        reverse(str, wstart, wend); 
    } 
} 

4 个答案:

答案 0 :(得分:3)

def gmsh_stl_mesher(id_name): gmsh.initialize(sys.argv) gmsh.option.setNumber("General.Terminal", 1) gmsh.model.add('Nastran_stl') gmsh.merge(id_name) dimtag = gmsh.model.getEntities()[0] dim=dimtag[0] tag=dimtag[1] surf_loop=gmsh.model.geo.addSurfaceLoop([tag]) gmsh.model.geo.addVolume([surf_loop]) gmsh.model.geo.synchronize() # We can then generate a 3D mesh... gmsh.model.mesh.generate(3) id_name2=id_name.replace(".stl","_tet.bdf") gmsh.write(id_name2)

相同
wstart = wend = start
  

如果这些变量中的任何一个值发生变化,是否都会更改两个变量的值?

不,更改一个变量不会影响其他变量,所有三个变量都是独立变量。

答案 1 :(得分:1)

b = c这样的赋值本身就是一个表达式,其值就是赋值后b的值。

因此

a = b = c;

可以被视为

a = (b = c);

等效于:

b = c;
a = b;

所有三个变量a,b和c彼此完全独立。

您可以通过以下代码段进行演示:

int a = 1;
int b = 2;
printf("%d\n", a);
printf("%d\n", a = b);
printf("%d\n", a);

输出

1
2
2

答案 2 :(得分:0)

如果更改其中一个变量,则不会更改其他变量。它们全部引用相同的内存位置。

int wstart, wend; 
for (wstart = wend = start; wend < end; wend++) { 

wstartwendstart,每个都有其值的副本,更改一个不会更改其他值。

答案 3 :(得分:0)

此代码段

wstart = wend = start

利用以下事实:在C中,赋值是一个返回值的表达式。发生的事情是wend = startstart的值分配给wend并“返回”它。此“返回”值已分配给wstart。因此,总体效果是将startwend都分配给wstart

这是我以前见过的样式,但我个人不喜欢它。我希望:

for (wstart = start, wend = start; wend < end; wend++)

它做同样的事情,但以更清晰的方式,IMO。