动态分配问题中数组的大小
size of array in dynamic allocation problem
我要解决这个问题:"Write a program that reads from the keyboard a sequence of 10 integers, and writes the same sequence in reverse order, dividing by 2 the even elements of the sequence."
我想知道数组 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;
}
when I try to get the size of array with l = sizeof(p)/sizeof(p[0])
the for loop below doesn't works.
这失败了,因为 p
是一个指针,而不是数组。 p
的大小大约是 4 或 8。
I want to know the size of the array p
p
不是数组。只需使用 n
中使用的配置即可。
sizeof 的 return 值将是以字节为单位的大小——不是数组的大小,而是指针的大小,在本例中它是一个整数。你想要的是长度。您将长度存储在 n.
您的 for 循环有点令人困惑。尝试使用 n - 1(数组的长度)以通过访问数组的最后一个索引值来启动循环。此外,else 块内的 printf
不会 space 正确输出。试试下面的代码:
for (i = n - 1; i >= 0; --i)
{
if (p[i] % 2 == 0)
{
printf("%d ", p[i] / 2);
}
else
{
printf("%d ", p[i]);
}
}
我要解决这个问题:"Write a program that reads from the keyboard a sequence of 10 integers, and writes the same sequence in reverse order, dividing by 2 the even elements of the sequence."
我想知道数组 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;
}
when I try to get the size of array with
l = sizeof(p)/sizeof(p[0])
the for loop below doesn't works.
这失败了,因为 p
是一个指针,而不是数组。 p
的大小大约是 4 或 8。
I want to know the size of the array p
p
不是数组。只需使用 n
中使用的配置即可。
sizeof 的 return 值将是以字节为单位的大小——不是数组的大小,而是指针的大小,在本例中它是一个整数。你想要的是长度。您将长度存储在 n.
您的 for 循环有点令人困惑。尝试使用 n - 1(数组的长度)以通过访问数组的最后一个索引值来启动循环。此外,else 块内的 printf
不会 space 正确输出。试试下面的代码:
for (i = n - 1; i >= 0; --i)
{
if (p[i] % 2 == 0)
{
printf("%d ", p[i] / 2);
}
else
{
printf("%d ", p[i]);
}
}