小编box*_*__l的帖子

为什么C支持负数组索引?

从SO中的这篇文章来看,很明显C支持负指数.

  1. 为什么在程序中支持这种潜在的内存违规?

  2. 编译器不应该至少抛出一个负指数警告吗?(我正在使用GCC)

  3. 或者这个计算是在运行时完成的?

编辑1: 任何人都可以暗示它的用途吗?

编辑2: 用于3.)使用[]数组/指针中的循环计数器表示指数的运行时计算.

c arrays pointers

13
推荐指数
4
解决办法
8822
查看次数

为什么InputStream read()返回一个int而不是short?

我正在阅读字节流试用,并注意到以下声明

请注意,read()返回一个int值.如果输入是字节流,为什么read()不返回字节值?使用int作为返回类型允许read()使用-1来表示它已到达流的末尾.

使用a的给定原因 int是它们可以通过-1识别EOF.(似乎很浅)

所以下一个更大的原始类型是short,它也支持-1所以为什么不使用它?

从我收集的内容:(使用的理由int)

  1. 由于性能int是首选. (这个)
  2. int变量在最后16位中保存一个字符值(来自 字符试验)
  3. 其他更抽象的流需要读取的不仅仅是一个字节(我猜的是(在字符流中发生))

我的理由是否正确?我错过了什么(比如纠错)?

java

5
推荐指数
1
解决办法
272
查看次数

数组转换问题

我有以下代码:

String []d=new String[]{"y","z"};
Object []ab=d;
d=(String[]) ab;
System.out.println(d[0]);
System.out.println(ab[0]);
Run Code Online (Sandbox Code Playgroud)

按预期返回y两次

但是下面的代码抛出一个java.lang.ClassCastException(这里fileList是一个ArrayList<File>对象)

File[] loadedFiles=new File[fileList.size()];
Object[] toArray = fileList.toArray();
loadedFiles=(File[]) toArray;
System.out.println(toArray[0]);
System.out.println(loadedFiles[0]);
Run Code Online (Sandbox Code Playgroud)

虽然以下不会抛出任何东西:

loadedFiles=fileList.toArray(new File[0]);
Run Code Online (Sandbox Code Playgroud)

Javadoc 1.5说(约toArray()):

返回的数组将是"安全的",因为此集合不会保留对它的引用.(换句话说,即使此集合由数组支持,此方法也必须分配新数组).因此调用者可以自由修改返回的数组.

那么为什么我不能通过强制转换来修改数组类型呢?

谢谢!

java arrays

2
推荐指数
1
解决办法
103
查看次数

代码的时间在Java中的嵌套for循环中执行

我最近正在阅读Robert Sedgewick 所着的名为Algorithms的书.我在阅读"算法分析"时遇到了一段代码.代码如下:

public static int count(int a[]) {
    int N = a.length;
    int cnt = 0;
    for (int i = 0; i < N; i++) {

        for (int j = i + 1; j < N; j++) {
            for (int k = j + 1; k < N; k++) {
                if (a[i] + a[j] + a[k] == 0) {  //here 
                    cnt++;
                }
            }
        }
    } 
    return cnt
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是-loop中if-statement for执行了多少次.这本书提供的答案是N(N-1)(N-2)/6.但我不知道为什么,任何人都可以解释.

java algorithm

1
推荐指数
1
解决办法
364
查看次数

标签 统计

java ×3

arrays ×2

algorithm ×1

c ×1

pointers ×1