【问题标题】:Hackerrank Objective-c int pointer not correct valueHackerrank Objective-c int 指针值不正确
【发布时间】:2017-11-15 18:58:53
【问题描述】:

如果我想要一个来自索引的数组的整数,例如:“int value = ar[n]”,我总是会得到巨大的整数。这代表它的最大尺寸(我认为)。

输入(标准输入)

4
3 2 1 3

代码:

int main(int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int n;
scanf("%i",&n);
int ar[n];

int counter = 0;
int tempValue;

for(int ar_i = 0; ar_i < n; ar_i++){

   int value = ar[ar_i];

    if(tempValue < ar[ar_i]){

        counter = 1;
        tempValue = ar[ar_i];
        printf("%i", tempValue);            
    }else if(tempValue == value){

        counter = counter + 1;
    }
}

[pool drain];
return 0;

}

printf("%i", tempValue);例如给出输出“1598483120”。 将任何对象转换为 (int) 都没有帮助。

我有什么问题吗?或者发生了什么?

【问题讨论】:

  • tempValue 未初始化。
  • int ar[n]; 是一个未初始化的本地数组。
  • 我的评论是针对 C 标签的。为什么当问题标题显示“Objective-c”时它仍然存在? NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 在 C 代码中做了什么?
  • @WeatherVane - 这不是 C 代码,它看起来像是作为 Objective-C 命令行应用程序的标准 Xcode 模板开始的。当然,添加的代码几乎是纯 C,问题本身与语言无关......无论如何,这将解释标签。

标签: objective-c integer


【解决方案1】:

你定义了int ar[n],但你没有用值初始化它。访问未初始化的变量,就像您在编写 int value = ar[ar_i] 时所做的那样,是未定义的行为;这通常会导致“垃圾”值,尽管其他行为 - 当然 - 也是可能的。这同样适用于变量tempValue

因此,请务必在访问变量之前对其进行初始化,例如for (int i=0; i&lt;n; i++) arr[i] = 0;int tempValue=0

进一步注意 - 如果您使用的是 Objective-c - 您的 IDE(可能是 XCode)可能不会使用 C 而是 C++ 用于您的.mm-source 文件;那么可能不支持像int arr[n] 这样的可变长度数组。

【讨论】:

  • 谢谢!你的右边 ar[n] 是空的。我在循环中删除了“scanf()”(认为这是一个输出日志)。现在我知道这个方法将值添加到数组中。愚蠢的错误在我身边。
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 2018-06-24
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多