C语言 为什么编译器返回一个无用的值后,我解引用它,并对其执行一些操作?



j是指向i的指针。第一个打印语句返回i的值,但是当我尝试将指针和i增加1时,它返回一个无用的值,我认为这是i的地址。为什么会发生这种情况,我在哪里可以更详细地了解指针?

#include <stdio.h>
int main( )
{
int i = 3, *j;
j = &i ;
printf ( "nValue of i = %u", *j ) ;
*j++;
printf ( "nValue of i = %u", *j ) ;
}

*j++之后,我希望j指向i,i的值现在应该是4。因此,当我打印*j时,它应该返回4。

我觉得应该打印4

我假设你认为你在增加i。但实际上,您正在增加j指针,而不是它指向的内容。这是因为C运算符的优先级表明++的优先级高于*

也就是说,*j++正在做:

  1. j++
  2. *j

第二步是no-op,因为没有使用结果。

你真正想要的是:(*j)++

相关内容

  • 没有找到相关文章

最新更新