首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的@运算符与C中的&运算符相同吗?

Objective-C中的@运算符与C中的&运算符相同吗?
EN

Stack Overflow用户
提问于 2011-04-27 04:46:09
回答 4查看 243关注 0票数 2

objective C新手入门尝试理解Objective C中的指针

我的代码

代码语言:javascript
复制
#import <Foundation/Foundation.h>

 int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSString *msg = @"Hello Bhai";
NSLog(@" address is %i for msg", msg);
NSLog(@" which is same address  %i for Hello Bhai", @"Hello Bhai");
NSLog(@" which is different address  %i for Hello mere Bhai", @"Hello mere Bhai");
NSLog(@" value is %@ at the address for msg", msg);


[pool drain];
    return 0;
}

输出为

代码语言:javascript
复制
[Session started at 2011-04-26 16:31:11 -0400.]
2011-04-26 16:31:11.656 BasicObjC[1523:10b]  address is 8240 for msg
2011-04-26 16:31:11.658 BasicObjC[1523:10b]  which is same address  8240 for Hello Bhai
2011-04-26 16:31:11.659 BasicObjC[1523:10b]  which is different address  8288 for Hello mere Bhai
2011-04-26 16:31:11.660 BasicObjC[1523:10b]  value is Hello Bhai at the address for msg

这是否意味着目标C中的@与C中的&相同?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-27 04:56:15

是否意味着目标C中的@与C中的&相同

不,在此上下文中,'@‘用于区分objective文本和C字符数组,以便您可以选择使用NSString -c NSStrings而不是C字符串。

在格式中,字符串'%@‘用于获取描述的字符串表示(来自其“NSObject”方法),因此您可以将其输出到控制台。

您还会遇到NSString文本的特殊行为。你的两个@"Hello Bhai“字符串指针都引用了相同的内存地址,这只是因为NSString被优化为不会创建相同的字符串文本副本。其他对象不一定具有相同的行为方式。一般来说,您不应该知道这种优化,因为在使用这些对象时不应该有任何不同。如果您正确地遵循与任何其他对象相同的保留/释放规则和比较,那么您将永远不会注意到差异。

票数 4
EN

Stack Overflow用户

发布于 2011-04-27 04:48:47

@被用来表示字符串是一个NSString文字,所以你可以将它赋值给NSString对象。

如果你想打印一些地址,那么你应该使用%p格式说明符,而不是%i,例如

代码语言:javascript
复制
NSLog(@" address is %p for msg", msg);
票数 5
EN

Stack Overflow用户

发布于 2011-04-27 04:49:55

at符号(@)与&操作符完全不同。@"…"语法是根据引号中给出的字符创建NSString实例的一种简写方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5796244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档