c语言数组问题——求助
- C/C++ code
#include<stdio.h>#define N 10int main(){ int a[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int sum = 0; int *p = NULL; for (p = &a[0]; p < &a[N]; ++p) { sum += *p; } printf("sum = %d. \n", sum); return 0;}元素a[N]并不存在,for循环中的“p < &a[N]; ”安全吗?
[解决办法]
好像可以,在那本书看到过,不过还真没这么用过
[解决办法]
可以吧 &a[N]并没有去进行解引用。
[解决办法]
安全。 &a[N]是紧靠着数组之后的地址,小于这个地址的p自然是在数组里。
但这里的前提是p不会被弄去做那些奇怪的操作,比如p=(int)p+1之类的。否则还是有可能会导致越界。
[解决办法]
可以的,
其实a[N]中==*(a+N)这样调用。
就和指针调用元素的道理一样的
不过一般不会这么使用的
[解决办法]
应该是安全的。&a[N]只是取地址作为边界,并没有访问a[N]的内容。
for (p = &a[0]; p < &a[N]; ++p)
{
sum += *p;
}
和下面的用法是相似的:
for (p = a; p < a + N; ++p)
{
sum += *p;
}