C 指针和类型转换
对或错: 以下作业有效:C 指针和类型转换,c,pointers,casting,type-conversion,C,Pointers,Casting,Type Conversion,对或错: 以下作业有效: #define GIMME *(unsigned int**) 0x3000 unsigned short d = 42; GIMME = &d; 这是错误的,尽管我不明白为什么。我最近已将Java转换为C,因此我们将非常感谢您的帮助。代码尝试了两个有问题的东西: 将数据分配到未知有效的位置(3000) *(unsigned int**) 0x3000 = &d; 正在尝试分配不兼容的类型。对齐可能会失败,因为unsigned short可能
#define GIMME *(unsigned int**) 0x3000
unsigned short d = 42;
GIMME = &d;
这是错误的,尽管我不明白为什么。我最近已将Java转换为C,因此我们将非常感谢您的帮助。代码尝试了两个有问题的东西:
*(unsigned int**) 0x3000 = &d;
unsigned short
可能比unsigned int
窄。鉴于此,这两种类型可能有不同的最低对齐要求代码正在尝试两个有问题的事情:
*(unsigned int**) 0x3000 = &d;
unsigned short
可能比unsigned int
窄。鉴于此,这两种类型可能有不同的最低对齐要求你如何定义“有效”?如果这些行位于函数定义中,则看起来是正确的。整数
0x3000
将以实现定义的方式转换为指针,无符号短
和无符号整数
可能具有相同的对齐要求。您想做什么?这不是您要查找的代码。换一本好的C语言书。@MikeCAT:但是unsigned short*
和unsigned int*
是不同的类型,如果没有显式强制转换,就不能将一种类型分配给另一种类型。强制转换的GIMME
需要是(unsigned short**)
,或者&d
需要强制转换为unsigned int*
。要在措辞上说明这一点,没有显式/隐式强制转换,因为“强制转换”是隐式显式的。另一件事叫做“隐式转换”:charc='a';int i=c;/*这里从char到int的隐式转换*/
如何定义“valid”?如果这些行位于函数定义中,则看起来是正确的。整数0x3000
将以实现定义的方式转换为指针,无符号短
和无符号整数
可能具有相同的对齐要求。您想做什么?这不是您要查找的代码。换一本好的C语言书。@MikeCAT:但是unsigned short*
和unsigned int*
是不同的类型,如果没有显式强制转换,就不能将一种类型分配给另一种类型。强制转换的GIMME
需要是(unsigned short**)
,或者&d
需要强制转换为unsigned int*
。要在措辞上说明这一点,没有显式/隐式强制转换,因为“强制转换”是隐式显式的。另一件事叫做“隐式转换”:charc='a';int i=c;/*此处从char到int的隐式转换*/