C 我可以通过使数组的任何元素等于声明但未初始化的任何整数变量来对其进行变异吗?
代码:C 我可以通过使数组的任何元素等于声明但未初始化的任何整数变量来对其进行变异吗?,c,arrays,C,Arrays,代码: #包括 #包括 int main() { INTA,b,c,d,t; int-arr[8]={8,6,5,6,7,8,7,8}; int arr_foo[8]={6,7,8,4,8,4,2,7}; printf(“第一个数组是\n”); 对于(a=0;a简短回答:是的。但是你会得到一个垃圾值 答案很长(Eric Postpuschil的回答更好): 根据C 2011(N1570),C标准未定义该行为 6.3.2.1 2:“如果左值指定了一个自动存储持续时间的对象,该对象可以用寄存器存储类
#包括
#包括
int main()
{
INTA,b,c,d,t;
int-arr[8]={8,6,5,6,7,8,7,8};
int arr_foo[8]={6,7,8,4,8,4,2,7};
printf(“第一个数组是\n”);
对于(a=0;a简短回答:是的。但是你会得到一个垃圾值
答案很长(Eric Postpuschil的回答更好):
根据C 2011(N1570),C标准未定义该行为
6.3.2.1 2:“如果左值指定了一个自动存储持续时间的对象,该对象可以用寄存器存储类声明
(从未获取过其地址),并且该对象未初始化(未初始化)
使用初始值设定项声明,但尚未对其进行赋值
使用前执行),行为未定义。“
通常,如果使用未初始化的对象,C 2011标准不会定义该行为:
如果左值指定了一个具有自动存储持续时间的对象,该对象本可以用寄存器存储类声明(从未获取过其地址),并且该对象未初始化(未用初始值设定项声明,并且在使用之前未对其执行赋值),则行为未定义
在C 1999中,该行为是部分定义的。使用未初始化的值只会给您一个不确定的值。只要该值不是陷阱表示,代码就会像对象已初始化为未指定的值一样执行
大多数实现都会提供C 1999行为,并且不会为int
设置陷阱表示。但是,如果使用未初始化的值,至少有一个实现可能会设置陷阱(这就是将语言添加到C 2011标准的原因)因此,如果您只想依赖C 2011标准,您可能不会使用自动存储持续时间的未初始化对象(除非您获取它们的地址)。标题的答案是肯定的。但我不确定标题与问题中的代码有何关联。printf(“%d%s”,arr[a],”);
->printf(“%d”,arr[a]”)
t
可能已经与元素重叠。C标准未定义该行为。根据C 2011(N1570)6.3.2.1 2:“如果左值指定了一个自动存储持续时间的对象,该对象本可以用寄存器存储类声明(从未获取其地址),并且该对象未初始化(未使用初始值设定项声明,且在使用前未对其执行赋值),行为未定义。“
#include<stdio.h>
#include<conio.h>
int main()
{
int a, b, c, d,t;
int arr[8]={8,6,5,6,7,8,7,8};
int arr_foo[8]={6,7,8,4,8,4,2,7};
printf("the first array is\n");
for(a=0; a<8; a++)
{
printf("%d %s", arr[a], ",");
}
printf("\n");
printf("the second array is\n");
for(a=0; a<8; a++)
{
printf("%d %s", arr_foo[a], ",");
}
printf("\n");
for(a=0; a<8; a++)
{
for(b=a+1; b<8; b++)
{
if(arr[a]==arr[b])
{
arr[b]=t;
}
}
if(arr[a] != t)
{
c=0;
for(d=0; d<8; d++)
{
if(arr[a]==arr_foo[d])
{
c++;
}
}
printf("%d %s %d %s\n", arr[a], "found", c, "times");
}//end if
}//end for
getch();
return 0;
}//end main