我正在用C写一个程序,只是为了好玩(和锻炼),我偶然发现了这种行为,我不明白…不能使用++
操作符
void fn(void **p)
{
*p++;
// other options like *p+=1 or ++*p work, but I dont understand why...
}
谁能解释一下(对于一个新手;))为什么这不起作用?我很好奇。
您似乎是通过指向该函数的指针间接传递指向该函数的指针。
要使原指针递增,需要对指向原指针的指针解引用,然后再对其递增。
例如
++*p;
否则这个表达式语句
*p++;
不增加原指针,因为该语句等价于
*( p++ );
由于运算符的优先级。
实际上上面的语句等价于
p++;
,因为没有使用操作符*的结果。
另一方面,即使你写的语句是正确的(根据逻辑)
++*p;
这是没有意义的,因为你可能不会增加类型为void *
的指针(尽管一些编译器允许这样的操作类型的指针类型void *
类似于char *
类型),因为类型void
是一个不完整的类型,不能完成。