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++
正在做:
j++
*j
第二步是no-op,因为没有使用结果。
你真正想要的是:(*j)++