这是源代码:
int main(void)
{
int i = 5, *j, *k;
j = &i;
k = j; // first assignment
k = (int*)j; // second assignment
return 0;
}
变量k
的两个赋值之间有什么区别?
答案 0 :(得分:2)
在这种情况下没有。
j
已经是整数指针,因此无需强制转换它。 (int*)
是多余的。
但是如果指针类型与声明不匹配,有人可能需要将其表达式转换为适当的指针类型。
答案 1 :(得分:2)
j
已经是一个int-pointer,因此转换是多余的。两个语句都会为k
分配相同的值(即变量i
的地址)
答案 2 :(得分:1)
在第二个作业中,您对k
的类型进行显式强制转换,该类型恰好与j
的类型相同。
如果它们具有不同的类型但是可转换的类型,则第二个赋值应该仍然有效,而第一个赋值会产生错误。
答案 3 :(得分:0)
在类似数据类型的情况下不需要强制转换:
k and j
是整数指针在将k = (int*)j
地址j
分配到k
期间,不需要显式类型转换。这里的铸造是多余的。
int main(void)
{
int i = 5, *j, *k;
j = &i;
k = j; // first assignment
k = (int*)j; // second assignment
return 0;
}