使用下标访问指向long long int的指针

时间:2017-10-29 14:17:20

标签: c pointers memory-management

我最近在编码比赛中遇到了这个片段。无法想象这是如何工作的。第二行创建一个指向单个 long long int的指针。

  1. 我们如何在for循环中使用下标?

  2. 即使可能,也不会在第二次迭代时引发分段错误?

  3. int Q = 3;
    long long *queryArray = (long long*)malloc(sizeof(long long));
    
    for(i_queryArray = 0; i_queryArray < Q; i_queryArray++){
        scanf("%lld", &queryArray[i_queryArray]);
    }
    

    如何解读此代码段?

1 个答案:

答案 0 :(得分:2)

这段代码确实是错误的。它超出范围并写入索引[1][2],这些索引不存在。

访问无效数组元素不一定会导致分段错误。它是未定义的行为,意味着任何事情都可能发生(包括崩溃,破坏不相关的数据,或看似没有问题的工作)。

如果您对一般的下标感到困惑:a[b]只是意味着*(a + b)。第一次迭代很好,因为ptr[0] *(ptr + 0)*ptr