遍历双指针数组并与 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个元素
#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个元素