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

问题描述 投票:0回答:2

我必须解决这个问题:“编写一个程序,该程序从键盘读取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;
}
c arrays sizeof
2个回答
0
投票

[当我尝试使用l = sizeof(p)/sizeof(p[0])获取数组的大小时,下面的for循环不起作用。

这失败,因为p是指针,而不是数组。 p的大小约为4或8。

我想知道数组p的大小

p不是数组。只需使用分配中使用的n


0
投票

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]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.