遍历双指针数组并与 C 中的 sizeof 相乘或不相乘?

Looping through a double pointer array and multiply or not multiply with sizeof in C?

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    double *array;
    unsigned int size;

    printf("Choose size for your number array: ");
    scanf("%u", &size);

    array = malloc(sizeof(double) * size);

    return 0;
}

我分配了内存sizeof(double) * size,我不知道是否需要sizeof(double),但是sizeof(double)不是1,所以我不知道我是否应该:

for (int i = 0; i < size; i++) {

} 

For 循环遍历 size 而不将它与 sizeof(double) 相乘,或者:

for (int i = 0; i < sizeof(double) * size; i++) {

}

For 循环并用 sizeof(double) 乘以大小?我问的原因是因为我真的很想小心并防止尺寸过大。

For循环不乘sizeof(double)还是不?

您分配 sizeof(double) * size 内存以拥有双精度数组,元素数量为 size。所以乘以malloc,不要乘以for

malloc(X) returns X 字节,所以如果你想存储 size 双打,调用 malloc(size * sizeof(double))

在此声明中

array = malloc(sizeof(double) * size);

已为 size 个元素分配内存,其大小为双精度类型的对象。

您可以像这样重写语句

array = malloc( sizeof( double[size] ) );

具有自动存储持续时间的等效声明如下所示

double array[size];

如果你会写(对于上面显示的具有自动或静态存储持续时间的数组的声明)

printf( "sizeof( array ) = %zu\n", sizeof( array ) );

您将得到一个等于 size * sizeof( double ) 的值。

所以如果你想遍历所有分配的元素来初始化它们你应该这样写

for ( int i = 0; i < size; i++ )
{
    *( array + i ) = 0.0;
}

相当于

for ( int i = 0; i < size; i++ )
{
    array[i] = 0.0;
}

这个表达式

array + i

在使用指针算术的地方,指针的值等于

( double * )( ( char * )array + i * sizeof( double ) ) 

也就是指向分配数组的第i个元素