动态分配问题中数组的大小

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]);
    }
}