【发布时间】:2013-07-22 22:57:11
【问题描述】:
我的 CS 课程正在从 Java 转向 C。我现在正忙于研究指针,我发现用于递增的 ++ 运算符在取消引用时不起作用。这更像是一个好奇的问题。只是还不习惯指针的概念。我只是做错了什么还是与指针有关?
例如:
*pointer++; Will not increment the value.
*pointer+=1; Will increment the value.
提前致谢!
【问题讨论】:
我的 CS 课程正在从 Java 转向 C。我现在正忙于研究指针,我发现用于递增的 ++ 运算符在取消引用时不起作用。这更像是一个好奇的问题。只是还不习惯指针的概念。我只是做错了什么还是与指针有关?
例如:
*pointer++; Will not increment the value.
*pointer+=1; Will increment the value.
提前致谢!
【问题讨论】:
*pointer++; 几乎等同于:
*pointer;
pointer = pointer + 1;
为什么会这样?
在表达式*pointer++; 中,++ 是后缀运算符,因此先执行* 遵循操作,然后++ 递增pointer 的值(而不是递增值)。
而*pointer += 1 仅相当于:
*pointer = *pointer + 1;
增加pointer 指向的值。
【讨论】:
当您想增加值时,您必须确保使用括号。
(*pointer)++;
【讨论】:
*pointer++ 递增 pointer 变量,而不是它指向的值。
int array[4] = {3,5,7,9};
int *pointer = array;
// *pointer equals 3
*pointer++;
// *pointer now equals 5
【讨论】:
CTRL + K,否则可以使用<pre> </pre> ..
*pointer++;
等价于
*(pointer++); // pointer is incremented
而不是
(*pointer)++; // pointee is incremented
【讨论】:
这与运算符的优先级有关:后增量++ 的优先级高于取消引用运算符*,而+= 的优先级较低in the table of operator precedences。这就是为什么在第一个示例中++ 应用于随后被取消引用的指针,而在第二个示例中+= 1 应用于取消引用的结果。
【讨论】: