我必须解决这个问题:“编写一个程序,该程序从键盘读取10个整数的序列,并以相反的顺序写入相同的序列,将序列的偶数除以2。”
我想知道数组p的大小以相反的顺序打印它,但是当我尝试使用“ l = sizeof(p)/ sizeof(p [0])”来获取数组的大小时,下面的for循环不起作用。
int main(){
int n,i;
int *p;
int l;
printf("How long the array? ");
scanf("%d",&n);
p = malloc(n*sizeof(int));
if(p != NULL){
for(i=0;i<n;i++){
printf("Insert number in index (%d) of array: ",i);
scanf("%d",p+i);
}
l = sizeof(p)/sizeof(p[0]);
for (i=n;i == 0;i--){
if(p[i] % 2 == 0){
printf("%d ",p[i]/2);
}
else{
printf("%d",p[i]);
}
}
}
else{
printf("ERROR!!");
}
return 0;
}
[当我尝试使用
l = sizeof(p)/sizeof(p[0])
获取数组的大小时,下面的for循环不起作用。
这失败,因为p
是指针,而不是数组。 p
的大小约为4或8。
我想知道数组p的大小
p
不是数组。只需使用分配中使用的n
。
sizeof的返回值将是以字节为单位的大小-不是数组的大小,而是指针的大小,在这种情况下为整数。您想要的是长度。您的长度存储在n中。
您的for循环有点混乱。尝试使用n-1(数组的长度),以便通过访问数组的最后一个索引值来开始循环。另外,else块内的printf
不能正确隔开输出。尝试以下代码:
for (i = n - 1; i >= 0; --i)
{
if (p[i] % 2 == 0)
{
printf("%d ", p[i] / 2);
}
else
{
printf("%d ", p[i]);
}
}