【发布时间】:2015-04-05 20:31:18
【问题描述】:
我正在研究 Obj-C 中的指针。考虑以下代码:
char c = 'Q';
char *charPtr;
charPtr = &c;
在第二行中,我们创建一个 char 类型的指针变量并将其命名为charPtr。据我了解,这只是指向包含char 类型值的内存地址的指针。
在第三行中,我们将charPtr 值(内存地址)分配给另一个包含值c 的内存地址。
我的问题是,charPtr 和 *charPtr 有什么区别?
当我写 *charPtr = &c 时,有一个“黄色”警告 - Incompatible pointer to integer conversion assigning to 'char' from 'char *'; remove &
如果启动应用程序崩溃 (exc_bad_access)
当我写 **charPtr = &c; 时,编译器警告我错误:Indirection requires pointer operand ('int' invalid)
总结一下,我想知道charPtr和*charPtr的区别,什么是**charPtr(2个星号)。
【问题讨论】:
-
charPtr是char*类型的指针。*charPtr是char类型;它是指针指向的char对象。**charPtr是非法的,因为*charPtr不是指针。 -
@KeithThompson 在这种情况下有资格使用 2 个星号,这是什么意思?谢谢你的澄清。
-
@Evgeniy Kleban 假设您有一些抽象指针声明 T *ptr; T 可以是任何类型,ptr 可以是指向 T 类型对象的指针,其中 T 是任何类型。如果 T 又是指针类型,例如 char *,那么您将拥有 char * *ptr。现在,如果你想声明一个指向具有 char ** 类型的对象 ptr 的指针,你必须在表达式 T *ptr T 中替换为 char **,你将得到 char ***ptr;
-
@VladfromMoscow 谢谢你,这是有道理的。
-
在您尝试学习 Objective-C 之前,请先学习 C 的基础知识。如果不这样做,你会得到很多错误的想法。
标签: objective-c c pointers