什么区别=指针
回答
第一个是错误的,你应该得到一个警告 - 从最不:
int x = (int *)7;
到你的编译器。 (int *)
类型的东西不应分配给int
。
您应该得到一个错误,而不是警告,但编译器在这方面通常是错误的。 – 2011-05-17 15:09:13
第一个会导致编译器错误,因为您正在分配一个指向int的指针。指针(特别是在64位的地方)并不等同于整数。
确切的答案是第一个是将一个指针的地址分配给一个int,第二个是只分配一个int。
不,gcc只给我一个警告。 – sje397 2011-05-17 15:05:50
这是gcc中的故意错误。 – 2011-05-17 15:09:24
没有实际区别,因为在第一个例子中,7被明确地转换为int *,然后隐式转换为int来匹配x的类型。然而,第一个例子是“坏代码”,因为它很混乱。
它也是无效的C. C不允许从指针到整数类型的隐式转换,反之亦然。 – 2011-05-17 15:04:14
首先第一行无效。你不能指定一个指向int的指针(也就是说,你真的不应该这样做,它是允许的,但它没有任何意义)。
然而,所不同的是(int*)7
是指“在地址7的整数”,和7
只是意味着7.
'*(int *)7'表示“地址7处的整数”; '(int *)7'只表示“地址7”。 – 2011-05-17 17:25:43
@John Bode:是的,但它是'int *'而不是'void *'的事实意味着指针不知何故指出它指向的是什么类型。所以即使它是“地址7”,我们也知道这是一个整数。 – 2011-05-18 04:36:37
后者是初始化一个int
变量x
与值7
有效的C前者是编译时错误,许多编译器会错误地忽略。你不能指定一个指向整型变量的指针。
为什么不能将一个整型变量分配给一个指针?如果我有一个整数的地址值,我想分配给一个指针。我已经在嵌入式系统中完成了这项工作,并拥有一个平坦的地址空间 – 2011-05-17 20:18:56
您可以施放它,但无法直接分配。 C语言不允许在整数类型和指针类型之间直接分配。 – 2011-05-17 22:09:18
(int *)
警告:幽默的回答
+1这比大多数答案都好... – 2011-05-17 15:09:45
哈。 +1 ......... – sje397 2011-05-17 15:10:27
第一个例子储存为整数,这不是类型安全的一个地址,是不是真的有效(并打破了很多的平台)。你选择了一个与数字7具有相同字节表示的地址就是偶然。你可以很容易地选择另一个地址,包括一个不适合“int”数据类型的地址。
第二个示例将整数存储在整数中,该整数是有效的。
每个可访问的内存块都有一个地址,除了与该地址关联的数字之外,指针是什么都没有。如果你想在第一个例子,以“通过地址走”正确的,它会一直是这样的:
int x = *(&7);
(int x equals the contents of the address where the number seven is stored)
不幸的是,上述将无法编译任,为C缺乏的取地址的概念与名称不相关的常量。
- 1. 这两个指针有什么区别?
- 2. C:指针=变量和指针=变量有什么区别?
- 3. 常量指针和整型常量指针有什么区别?
- 4. Boost智能指针和std智能指针有什么区别?
- 5. 泛型指针和void指针有什么区别?
- 6. 指向指针的指针与C中指针的地址有什么区别?
- 7. ,对象和指向对象的指针有什么区别?
- 8. 指针和智能指针的区别
- 9. 指针 - 数组与指针的区别
- 10. *(指针+索引)与指针[]的区别
- 11. 删除指针并将指针设置为NULL有什么区别?
- 12. 指向数组的指针和指向指针的指针之间有什么区别?
- 13. 指针语法的区别
- 14. C++指针区别 - >
- 15. 指针之间的区别
- 16. java指针,这两个循环有什么区别?
- 17. Go - 性能 - 结构中的指针和值有什么区别?
- 18. 什么是青菜手表和指南针的区别看
- 19. 静态函数与类的静态指针有什么区别
- 20. 这些指针的使用有什么区别?
- 21. 这两个指针代码有什么区别
- 22. 不同类型的指针有什么区别?
- 23. 函数指针与函数调用有什么区别?
- 24. 使用“this”指针和不使用它有什么区别?
- 25. 分配指针时,memcpy和just assigning之间有什么区别?
- 26. 全局和本地指针有什么区别?
- 27. C&C++:数组的指针和地址有什么区别?
- 28. 使用结构指针和结构变量有什么区别?
- 29. 参考变量和常量指针变量有什么区别?
- 30. 这两个函数指针声明有什么区别?
一个会编译,另一个不会,至少不是没有警告? – 2011-05-17 15:02:51
根据C标准应该是错误的警告。 – 2011-05-17 15:08:29
这是你在编译器上玩的某种恶作剧吗? :D – hari 2011-05-17 17:42:23