-4

这段代码发生了什么http://ideone.com/stD7VU

首先,我认为我使用 int 作为指针并且编译器没有警告我。a然后第二个块我不明白我不使用时如何取消引用new。发生了什么?我不知道obj-​​c。

#import <stdio.h>

@implementation TestObj
int main()
{
    {
        int *a;
        a=5;
        printf("%d\n", a);
    }
    {
        int *a;
        *a=7;
        printf("%d\n", *a);
    }
    return 0;
}
@end
4

1 回答 1

4

首先,我认为我使用 int 作为指针并且编译器没有警告我。

实际上确实如此。在第一个块中,行

a=5;

会引发编译器警告,特别是

从“int”分配“int *”的整数到指针转换不兼容。


当我不使用 new 时,我无法理解如何取消引用

您正在尝试取消引用未初始化的指针。这是 C 中未定义的行为(并且作为 Objective-C 是 C 的超集,所以它在其中),因此您的程序可以在技术上打印 Dante 的整个神曲,并且仍然与规范一致。

顺便说一句,您不需要任何特殊的 C 构造来初始化指针。Objective-C 是 C 的真子集,因此您可以使用malloc.

对于对象,有一整套 API 专用于对象分配和释放,包括new.

于 2013-10-02T18:54:43.230 回答