在Objective C中声明变量时,何时不应使用星号(*)

Jas*_*son 10 iphone objective-c

我刚刚开始学习目标c,星号给我带来了一些麻烦.当我查看示例代码时,有时它会在声明变量时使用,有时则不会.什么是应该使用它的"规则".我认为它与变量的数据类型有关.(对象数据类型需要星号,像int这样的简单数据类型不需要)但是,我已经看到对象数据类型如CGPoint声明没有星号?是否有确定的答案或者它与您使用变量的方式和内容有关?

Pet*_*sey 17

什么是应该使用它的"规则".

您使用星号来声明指针.

对于Cocoa对象,您总是声明一个指针,因此您始终使用星号.你不能把对象本身放入变量中; 你总是处理一个指向对象的指针.

对于其他事情,它取决于变量是否包含对象(在C意义上)或指向对象的指针 - 其他地方.如果变量应该包含该对象,那么您不要用星号声明它,因为您没有在其中放置指针.如果它应该包含指针,那么你用星号声明它.

你甚至可以有一个指针指针; 正如您所料,这涉及多个星号.例如,NSRect **是一个指向NSRect指针的指针(NSRect是一个结构,而不是Cocoa对象).

我认为它与变量的数据类型有关.(对象数据类型需要星号,对于像int这样的简单数据类型不需要)

有点.Cocoa对象需要星号,因为您只能处理指向Cocoa对象的指针,而不能处理对象本身.但是Cocoa对象的声明规则也没有什么不同; 它们完全一样.如果需要指针变量,可以使用星号; 当你想要一个非指针变量时,你不会.

唯一的例外,Cocoa对象与通常规则的唯一区别在于,不允许声明保存对象本身的变量.这就是为什么你永远不会看到一个变量持有一个Cocoa对象而不是指向一个的变量:编译器不会允许它.

但是,我已经看到对象数据类型如CGPoint声明没有星号?

CGPoint是一个结构,而不是Cocoa对象.因此,您可以声明一个包含CGPoint的变量,而不是指向其他位置的指针.


wil*_*lli 7

我想你应该先阅读一下C编程.Objective-C是C的超集.你不使用*来声明CGPoint的原因是因为CGPoint是一个结构体,请查看CGGeometry.h头文件.


Wel*_*bog 6

星号表示变量是指向数据类型的指针.

您应该查看指针以获取更多信息.它们是编程的一个非常重要和基本的方面.