//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。
答案 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]