c-访问指向带下标的长整型的指针



我最近在一次编码竞赛中发现了这个片段。不知道这是怎么回事。第二行创建一个指向单个长整型的指针。

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

  2. 即使这是可能的,它不会在第二次迭代时引发分割错误吗?

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][2]

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

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

最新更新