sag*_*ino 3 c pointers postfix-operator
* ptrj ++执行后,ptrj值不应该为4吗?
int j=3,*ptrj = NULL;
ptrj = &j;
*ptrj++;
printf("%i",*ptrj);
Run Code Online (Sandbox Code Playgroud)
*ptrj++与相同*(ptrj++)。您所期望的是(*ptrj)++。您应该查找运算符优先级,以了解更多有关哪个运算符在其他运算符之前起作用的信息。要了解其ptrj++作用,您应该阅读有关指针算术的知识。但这是一个简单的解释:
*(ptrj++)返回ptrj指向(3)的值,然后THEN递增ptrj以指向下一个值。
(* ptrj)++返回ptrj指向(3)的值,然后THEN 将ptrj指向3 的值递增到4。
这意味着您要打印的是address &j + 1处的值,该值位于内存中变量之后j。这是未定义的行为。正如Sourav所指出的,如果启用了编译器警告,您将得到一条警告,指出您这一点。
*ptrj++和之间的唯一区别ptrj++是返回的内容。并且由于您不使用返回值,因此您的代码等效于:
int j=3,*ptrj = NULL;
ptrj = &j;
ptrj++;
printf("%i",*ptrj);
Run Code Online (Sandbox Code Playgroud)