在这样的函数中:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class NoTextSelectionCaret extends DefaultCaret
{
public NoTextSelectionCaret(JTextComponent textComponent)
{
setBlinkRate( textComponent.getCaret().getBlinkRate() );
textComponent.setHighlighter( null );
}
@Override
public int getMark()
{
return getDot();
}
private static void createAndShowUI()
{
JTextField textField1 = new JTextField("No Text Selection Allowed");
textField1.setCaret( new NoTextSelectionCaret( textField1 ) );
textField1.setEditable(false);
JTextField textField2 = new JTextField("Text Selection Allowed");
JFrame frame = new JFrame("No Text Selection Caret");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(textField1, BorderLayout.NORTH);
frame.add(textField2, BorderLayout.SOUTH);
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
这应该返回传递的字符串文字的第二个字符,因为参数 p 根本无法做到。
为什么会这样?
@ M.M:
char nextchr (void* p)
{
((char*)p)++;
return *(((char*)p));
}
需要左值(左手值)才能应用,并且类型广播的结果不是。
@OP更新:
一些编译器(通常/旧的C89 / / 编译器 /喜欢我的)可以允许++
/只要它不作为参数传递给函数/,即使它是非法的并且被证明是C标准是非法的。