首先,我认为我正在使用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
答案 0 :(得分:4)
首先,我认为我可以使用int作为指针,编译器不会警告我。
实际上确实如此。在第一个块中,行
a=5;
会引发编译器警告,特别是
不兼容的整数到指针转换分配&#39; int *&#39;来自&#39; int&#39;。
当我没有使用新的
时,我无法理解如何取消引用
您正尝试取消引用未初始化的指针。这是C中未定义的行为(而Objective-C是C的超集,因此它也在其中),所以你的程序可以在技术上打印Dante的整个Divine Comedy并且仍然符合规范。
顺便说一句,你不需要任何特殊的C结构来初始化指针。 Objective-C是C的适当子集,因此您可以使用malloc
。
如果是对象,则有一整套专用于对象分配和释放的API,包括new
。