private class DisabledColorDecorator implements DayDecorator {
@Override
public void decorate(DayView dayView) {
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy");
if (CalendarUtils.isPastDay(dayView.getDate())) {
int color = Color.parseColor("#a9afb9");
dayView.setBackgroundColor(color);
}
for (int i =0; i<bookDates.size();i++) {
try {
if (curFormater.parse(bookDates.get(i))== dayView.getDate()) {
int color = Color.parseColor("#a9afb9");
dayView.setBackgroundColor(color);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
我不明白为什么最后一个给我一个错误而前一个错误。
Int arr[2][4], *p; p = &arr[0][0];
*(p + 2) = 10; //ok
*(p + 5) = 20;// ok
*(*(arr + 1) + 3) = 15;//ok
*(*(p + 1) + 3) = 15;// error
等于p
,为什么它不起作用?
答案 0 :(得分:0)
arr
在int (*)[4]
的表达式*(*(arr + 1) + 3) = 15;
和*(arr + 1)
的{{1}}类型中(在数组到指针转换之后),因此取消引用运算符可以是适用于它。另一方面,int *
属于p
类型。 int *
的类型为*(p + 1)
,您无法对其应用解除引用运算符。
答案 1 :(得分:0)
表达式中的数组转换为指向其第一个元素的指针。
因此,表达式(在子表达式arr
)arr + 1
中的数组*(*(arr + 1) + 3)
将转换为类型为int ( * )[4]
的指针。反过来,子表达式arr + 1
也具有相同的类型。子表达式*(arr + 1)
生成一个类型为int[4]
的对象,该对象又转换为指向其第一个元素的指针,其类型为int *
。所以你可以取消引用这个指针,如
*(*(arr + 1) + 3) = 15;//ok
指针p
的类型为int *
因此,此子表达式*(p + 1)
的类型为int
,可能无法进一步解除引用。
比较这些一个在另一个下面写的语句
*(p + 2) = 10;
*(*(p + 1) + 3) = 15;
从第一个声明可以看出*(p + 2)
的类型为int
。因此,取消引用同样具有*(p + 1) + 3
类型的int
表达式并不具有男性意义。