分类:
2011-12-01 00:18:08
原文地址:关于printf应该注意的两个问题 作者:jonas_mao
运行结果:(cygwin)
这里的运行结果告诉了我们printf的特点:
printf()函数的参数,在printf()函数读取时是从左往右读取的,然后将读取到的参数放到栈里面去,最后读取到的就放在栈顶,处理参数的时候是从栈顶开始的,所以是从右边开始处理的。
所以第一个printf就可以看出先把参数依次入栈,最后在处理的时候是反过来的,即真正的执行顺序是从右到左的。此时先执行第二个i++;打印的值为0,然后i自增变为1,所以第一个i就自然的成为了1.打印出1 和 0。
相比较第一个,我们可以看到第一个是对值进行操作。第二个是则是对指针进行操作。根据printf的特点,当从右向左执行过程中,先执行static_Value(values, y) 此时values[0] = y; 然后执行 static_Value(values, x)此时values[0] = x; 这时因为并不是对值进行操作,而是指针,而且将要打印的指针的地址是一样的,都是values申请的内存地址,所以此时 打印出来的就都是最后一个执行的x了,因为最后一个执行的时候对这个地址空间进行的赋值是values的最终值。