以下两项任务之间有什么区别?

时间:2014-01-15 08:10:38

标签: c output variable-assignment

这是源代码:

int main(void)
{
    int i = 5, *j, *k;
    j = &i;
    k = j;        // first assignment
    k = (int*)j;  // second assignment
    return 0;
}

变量k的两个赋值之间有什么区别?

4 个答案:

答案 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;
}