我无法理解这行代码:
MyTable *t = (MyTable*)table;
有人可以解释等号右侧发生的事情吗?
答案 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 *类型,然后分配