为什么整数`j`返回`i`?

时间:2015-06-04 18:23:32

标签: c

  //Increment and decrement operators:
  char *s = "iLoveC";
  int j = 0;
  s[j++]; // => "i". Returns the j-th item of s THEN increments value of j.
  j = 0;
  s[++j]; // => "L". Increments value of j THEN returns j-th value of s.
  // same with j-- and --j

有关此问题的一些问题:

  • *上的s代表什么?
  • 为什么j在第4行返回i而不是0?
  • 为什么j在第6行返回l而不是1?

这来自初学者的简单教程(http://learnxinyminutes.com/docs/c/),我甚至无法理解它。我的背景是PHP / Javascript / Lisp。

2 个答案:

答案 0 :(得分:1)

*运算符将s声明为指针。这意味着它将包含已分配变量的地址。这里指针s的值是i,即字符串“iLoveC”的第一个元素。当你使用post increment s [j ++]时,它相当于s [0] ='i',但是当你使用s [++ j]时它相当于s [1] ='L'

请参阅此链接http://www.programiz.com/c-programming/c-pointers-arrays 并从readind开始阅读一些书籍。

答案 1 :(得分:1)

在C中,指针和数组之间存在很多重叠。这条线

char *s = "iLoveC";
在这种情况下,

可以被视为char值的数组,类似于

char s[7] = {'i', 'L', 'o', 'v', 'e', 'C', '\0'};

。在这种情况下,s[0]是字符'i'等。

s[j++]使用j上的增量后运算符,这样当j以值0开头时,就是j之前用于索引数组的值{1}}增加到1;表达式与s[j]; j++相同。

s[++j]使用j上的预增量运算符,其中变量在之前递增,用于索引数组;表达式与++j; s[j]

相同