我有这样的代码:
int quotient = 100/*ptr;
Run Code Online (Sandbox Code Playgroud)
其中ptr是指向整数的指针.
但它正在/*作为评论.
如何通过指针取消引用值来划分除法的含义?我还有什么额外的特殊性才能具备这个含义?
Moh*_*ain 33
这是因为语言试图重用令牌.(*在这种情况下)
解决方案是在两者之间放置一个空格/,*以便击败最大的蒙克.
int quotient = 100 / *ptr;
Run Code Online (Sandbox Code Playgroud)
另一种方法是添加一个括号或使用另一个局部变量:
int quotient = 100/(*ptr);
Run Code Online (Sandbox Code Playgroud)
fre*_*low 25
首先,您可以替换*ptr为ptr[0],因为两者具有相同的语义:
int quotient = 100/ptr[0];
Run Code Online (Sandbox Code Playgroud)
由于数组索引是可交换的,因此可以交换操作数:
int quotient = 100/0[ptr];
Run Code Online (Sandbox Code Playgroud)
对于不经意的读者来说,这可能看起来像是除零,但当然[]具有更高的优先级/.你可能想在那里放一个空格,以防万一:
int quotient = 100/0 [ptr];
Run Code Online (Sandbox Code Playgroud)
恭喜你,你现在有了一份终身的工作!
Sad*_*que 13
把它改成这个:
int quotient = 100/(*ptr);
Run Code Online (Sandbox Code Playgroud)
要么
int quotient = 100/ *ptr;
Run Code Online (Sandbox Code Playgroud)
/* 在我所知道的几乎所有语言中,它一起用于多行注释.
phu*_*clv 13
C和C++使用最大munch规则来解析标记.令牌之后的最长有效匹配字符串将是下一个令牌.
因此int quotient = 100/*ptr;,/*将是一个令牌,而不是两个令牌/和*.这是该规则的不良影响.
在某些情况下,"最大咀嚼"会导致不良或不直观的结果.例如,在C编程语言中,语句
x=y/*z;(没有任何空格)可能会导致语法错误,因为/*字符序列会启动一个(非预期的)注释,该注释要么是未终止的,要么是由*/某些后来的,不相关的实际的结束标记终止的.注释(C中的注释不嵌套).在语句中实际意味着将变量x分配给y中的值除以通过解除引用指针z获得的值的结果; 这将是完全有效的(虽然不是很常见)代码.可以通过使用空格或使用来说明x=y/(*z);.
要解决此问题,您只需要添加一个空格,换行符或其他虚拟标记(如注释)来分隔/和*.您也可以像其他答案一样用括号括起表达式
int quotient = 100/ /* this will work */ *ptr;
int quotient = 100/
*ptr; // this will also work
Run Code Online (Sandbox Code Playgroud)
一个类似的问题:为什么a+++++b在C中不起作用?
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |