c语言数组问题——求助

zuhfong 2012-03-19 02:02:25

#include<stdio.h>

#define N 10

int 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]; ”安全吗?
...全文
54 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
northcan 2012-03-19
  • 打赏
  • 举报
回复
应该是安全的。&a[N]只是取地址作为边界,并没有访问a[N]的内容。

for (p = &a[0]; p < &a[N]; ++p)
{
sum += *p;
}

和下面的用法是相似的:

for (p = a; p < a + N; ++p)
{
sum += *p;
}

shyrgst 2012-03-19
  • 打赏
  • 举报
回复
可以的,
其实a[N]中==*(a+N)这样调用。
就和指针调用元素的道理一样的
不过一般不会这么使用的
muyi66 2012-03-19
  • 打赏
  • 举报
回复
安全。 &a[N]是紧靠着数组之后的地址,小于这个地址的p自然是在数组里。

但这里的前提是p不会被弄去做那些奇怪的操作,比如p=(int)p+1之类的。否则还是有可能会导致越界。
pengfoo 2012-03-19
  • 打赏
  • 举报
回复
可以吧 &a[N]并没有去进行解引用。
nice_cxf 2012-03-19
  • 打赏
  • 举报
回复
好像可以,在那本书看到过,不过还真没这么用过

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧