Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在没有NSArray.n的情况下在目标c中声明整数数组_Objective C - Fatal编程技术网

Objective c 在没有NSArray.n的情况下在目标c中声明整数数组

Objective c 在没有NSArray.n的情况下在目标c中声明整数数组,objective-c,Objective C,(问题在第一次评论后更新) int max_size=20 int h[最大尺寸] 当使用max_size进行初始化时,调试给出h的值[-1] 如果我改为使用整数初始化。所以代码是:inth[20],它工作正常 这是Mac OS X 10.6上的GCC 4.2。如果我没记错的话,有些编译器需要在编译时明确知道堆栈分配数组的大小。在这种情况下(可能),您可以将max_size变量设置为const或#define宏(或整数文本,正如您所做的那样)。或者,您可以动态分配数组,然后大小可以是任何旧变量

(问题在第一次评论后更新)

int max_size=20
int h[最大尺寸]

当使用max_size进行初始化时,调试给出h的值[-1]

如果我改为使用整数初始化。所以代码是:
inth[20]
,它工作正常


这是Mac OS X 10.6上的GCC 4.2。

如果我没记错的话,有些编译器需要在编译时明确知道堆栈分配数组的大小。在这种情况下(可能),您可以将max_size变量设置为const或#define宏(或整数文本,正如您所做的那样)。或者,您可以动态分配数组,然后大小可以是任何旧变量

例:


我刚刚编译并运行了包含您的代码的以下程序:

#import <Foundation/Foundation.h>

int main() {
    int max_size = 20;
    int h[max_size];

    h[0] = 5;
    NSLog(@"It is %d", h[0]);

    return 0;
}
#导入
int main(){
int max_size=20;
int h[最大尺寸];
h[0]=5;
NSLog(@“它是%d”,h[0]);
返回0;
}
它工作得很好。问题不仅仅在于声明数组


这是MacOSX10.4上的GCC4.0.1。

对我很有用。如果您将其简化为一个简单的测试用例,并更新您的问题以包含该代码,这样我们就可以明确地看到出了什么问题,这可能会有所帮助。+1@Chuck。在C中可以执行的任何操作都可以在Objective-C中执行。您在哪里声明数组?在方法/函数中?还是在全球范围内?根据调试器,-1到底是什么?所有代码都写在同一个函数范围内。h[0]或h[max_size]给出-1。我使用GCC 4.2作为编译器。GCC不是这样的,如果是这样的话,不支持该功能的编译器通常会将声明标记为错误,而不是默默地编译废话。啊,这表明我有些无知。谢谢你的更正。我的编译器是MacOSX10.6上的GCC4.2。如果我将其更改为LLVM GCC 4.2,那么它可以正常工作,但在调试器窗口中看不到该变量。我甚至不知道LLVM是什么。必须有另一种解决方案。在这种情况下,编译器知道在函数的前两行之间不能更改max_size,因此它可以在编译时决定
h
数组的大小。如果以更复杂的方式计算max_size的值,则代码将不起作用。
#import <Foundation/Foundation.h>

int main() {
    int max_size = 20;
    int h[max_size];

    h[0] = 5;
    NSLog(@"It is %d", h[0]);

    return 0;
}