【发布时间】:2016-07-07 16:11:31
【问题描述】:
真假: 以下分配有效:
#define GIMME *(unsigned int**) 0x3000
unsigned short d = 42;
GIMME = &d;
这是错误的,尽管我无法理解为什么。我最近从 Java 转换为 C,因此我们将不胜感激。
【问题讨论】:
-
如何定义“有效”?如果这些行在函数定义中,这似乎是正确的。整数
0x3000会以实现定义的方式转换为指针,unsigned short和unsigned int可能有相同的对齐要求。 -
你想做什么?
-
这不是您要查找的代码。换一本好的 C 书吧。
-
@MikeCAT: 但是
unsigned short *和unsigned int *是不同的类型,如果没有明确的演员表,你不能将一个分配给另一个。GIMME中的转换必须是(unsigned short **),或者&d需要转换为unsigned int *。 -
在措辞上说明这一点:没有显式/隐式转换,因为“转换”是隐式显式的。另一件事叫做“隐式转换”:
char c = 'a'; int i = c; /* implicit conversion from char to int here */
标签: c pointers casting type-conversion