LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 719|回复: 9

数组中使用++运算符

[复制链接]
发表于 2004-9-30 19:27:26 | 显示全部楼层 |阅读模式
这个程序可以正常工作:

  1. main () {
  2.    int R[5];
  3.    int i, k=0, j=10;
  4.    for (i=0; i<5; i++) {
  5.       R[k]=j;
  6.       printf("k=%d\tR[k]=%d\n", k, R[k]);
  7.       k++;
  8.       j++;
  9.    }
  10. }
  11. [root@localhost data_con]# ./p145
  12. k=0     R[k]=10
  13. k=1     R[k]=11
  14. k=2     R[k]=12
  15. k=3     R[k]=13
  16. k=4     R[k]=14
  17. [root@localhost data_con]#
复制代码

这个程序不能正常工作:

  1. main () {
  2.    int R[5];
  3.    int i, k=0, j=10;
  4.    for (i=0; i<5; i++) {
  5.       R[k++]=j++;
  6.       printf("k=%d\tR[k]=%d\n", k, R[k]);
  7.    }
  8. }
复制代码

为什么?
谢谢。
发表于 2004-9-30 21:29:19 | 显示全部楼层
很正常嘛。刚开始时,k=0, j=10,第一次循环,执行R[k++]=j++后,此时k=1, j=11,但此时只有R[0]=10,而R[1]还没有被赋值,里面的数据是垃圾数据,打印出来就是你看到的结果了。
 楼主| 发表于 2004-10-11 15:16:21 | 显示全部楼层
第一次循环,k=0, r[k]=r[0]=j=10,之后k变成1,j变成11,
第二次循环,k=1,r[k]=r[1]=j=11,
为什么第二次循环不是这个结果?
发表于 2004-10-11 15:56:44 | 显示全部楼层
指的是那个程序,上面那个还是下面那个?
发表于 2004-10-12 10:35:37 | 显示全部楼层
like this will be ok.

R[k]=j++;
      printf("k=%d\tR[k]=%d\n", k++, R[k]);
发表于 2004-10-12 14:27:53 | 显示全部楼层
k++不一定比r[k]后执行吧
发表于 2004-10-12 15:53:20 | 显示全部楼层
据说sun的编译器上,参数求值是从左到右的。
 楼主| 发表于 2004-10-12 19:40:05 | 显示全部楼层
最初由 Xiangbuilder 发表
第一次循环,k=0, r[k]=r[0]=j=10,之后k变成1,j变成11,
第二次循环,k=1,r[k]=r[1]=j=11,
为什么第二次循环不是这个结果?

我指的是这段程序:

  1. main () {
  2.    int R[5];
  3.    int i, k=0, j=10;
  4.    for (i=0; i<5; i++) {
  5.       R[k++]=j++;
  6.       printf("k=%d\tR[k]=%d\n", k, R[k]);
  7.    }
  8. }
复制代码
发表于 2004-10-12 21:25:12 | 显示全部楼层
这个肯定会出错的。
例如,i=0的时候,先执行赋值语句,R[0]=0,然后k=j=1了,printf的时候就要输出R[1],这个时候R[1]还没有赋值,自然就不会是希望的结果了。
 楼主| 发表于 2004-10-13 15:23:41 | 显示全部楼层
谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表