首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言数组有关问题——

2012-03-21 
c语言数组问题——求助C/C++ code#includestdio.h#define N 10int main(){int a[N] {0, 1, 2, 3, 4, 5,

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;
}

热点排行