首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将int_[arr]重新分配到其当前值时int_的行为

将int_[arr]重新分配到其当前值时int_的行为
EN

Stack Overflow用户
提问于 2014-03-23 17:33:10
回答 1查看 28关注 0票数 0

考虑一下代码

代码语言:javascript
复制
#include<stdio.h>

#define printarr(a,len) iter = 0;while( iter < len )printf("%i ",*(a + iter++));printf("\n");
#define print(a) printf("%s\n",#a);
#define doexp(a); printf("%s:",#a);a;if( strstr(#a,"scanf") == NULL )printf("\n");

int main()
{
int a[10],b[10] = {},iter = 1;
printarr(a,10);
printarr(b,10);
scanf("%i",&iter[a]);
iter = 1;
printf("%i i = %i\n",iter[a],iter);

if( &iter[a] == &a[iter] )
{
 printf("true\n");
 if( iter[a] == a[iter] )
 {
  printf("true!!\n");
 }
}

return 0;
}

打印我为itera输入的值。

但是当我通过un-注释//doexp( iter = 1 );将1重新分配到iter时

它打印垃圾的价值为伊特拉;

在声明doexp( printf("%i i = %i\n",iter[a],iter) );

我尝试了aiter而不是aiter,但是得到了同样的结果。

使用gcc版本4.7.2 (Debian 4.7.2-5)

为什么会发生这种事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-23 17:40:55

doexp(scanf...iter为10时被“调用”(printarr生成iter=10)。因此,您正在将该值读入数组之外的a10中。它已经是未定义的行为,您只是幸运您的程序没有崩溃在这一点。

打印出a[1]将给您一个垃圾值,因为该项目尚未初始化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22594444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档