括号内的这个指针是什么意思?

时间:2014-02-21 14:28:10

标签: c pointers

我无法理解这行代码:

MyTable *t = (MyTable*)table;

有人可以解释等号右侧发生的事情吗?

6 个答案:

答案 0 :(得分:2)

指针(或其任何东西)table被转换为“指向MyTable”的类型。

答案 1 :(得分:1)

(MyTable*)不是指针。这是“指向MyTable”类型的c风格演员。

table可能是一个由演员转换的指​​针。

请不要在处理OO设计时,c风格的演员表并不总是c ++的最佳选择。

有关详细信息,请参阅:this question

修改

这个问题的语言标签最初是c ++。

答案 2 :(得分:1)

括号中的文本不是指针,而是类型名称。 MyTable *是指向MyTable的指针。

括号中的类型名称是强制转换。

演员表执行转换。

广播(MyTable *)将值转换为指向MyTable的指针。

有一些转换指针的规则可能有些棘手,因此这样的转换可能会也可能不会产生有效的代码。如果满足下列条件之一,则代码MyTable *t = (MyTable *) table;可能是有效的代码:

  • table已经是指向MyTable的指针,可以直接指向,也可以通过各种方式正确转换。
  • table指向使用malloc或其他内存管理例程分配的(足够)空间。
  • table等于NULL。

如果符合以下条件,则代码可能无效:

  • table指向MyTable以外的某种对象。
  • table不是指针。

还有一些其他特殊情况是有效的,但我省略了细节,因为它们是专门的。 (这些包括已经从指针和指针之间的转换转换为聚合和指向其第一个元素的指针的整数。)

答案 3 :(得分:0)

它将table转换为“指向MyTable的指针”。

MyTable可能是一个类或结构。指针 MyTable是它自己的一种类型(MyTable*)。

答案 4 :(得分:0)

令你困惑的是什么?无论table是什么,它都会被转换为指向MyTable的指针。这样,如果可以进行强制转换,则分配将有效。

答案 5 :(得分:0)

MyTable t =(MyTable )表; 每当出现这种情况时都会这样想    首先在右边: ()首先评估手段  table将转换为MyTable.look类型的指针,如下例

    when you say 
     float x;
     int y;
     x=y;//read below

当tou执行x = y时,y的类型为int,并且您将其分配给float 这里进行了implici转换,这是

 x=(float)y;

您正在采取的方式  首先将表转换为MyTable *类型,然后分配