【发布时间】:2013-06-14 00:48:32
【问题描述】:
我试图了解这段代码中的指针是如何工作的:
void allocateArray( int **arr, size_t size, int value )
{
*arr = malloc( size * sizeof( int ));
if ( *arr != NULL )
for ( size_t i = 0; i < size; ++i )
*( *arr + i ) = value;
}
int main( void )
{
int *vector = NULL;
allocateArray(&vector,5,45);
free( vector );
return 0;
}
如果我声明了一个指向 int ( *vector ) 的指针,那么传递它的地址如何使它成为指向 int ( **arr ) 的指针的指针?我的意思是,它是如何工作的,现在内存中向量的地址将被覆盖!
【问题讨论】:
-
向量的地址不会被覆盖 -
vector(最初是NULL)的值将被覆盖。 -
@RichardJ.RossIII - 如果是这样,为什么我不能像这样将指针本身传递给函数:allocateArray(vector, 5, 45);
-
@KaeLL:因为
allocateArray需要int**,而vector是int*;类型不兼容。 -
@KaeLL:如果你这样做,那么你只是传递了
vector的值,即NULL,你不能在allocateArray()中使用它。如果你真的想传递vector的值,它应该有一个指向在调用allocateArray()之前预分配的内存的值,删除allocateArray()内的malloc(),并进行适当的取消引用。 -
If I declared a pointer to an int ( *vector ), how passing its address makes it a pointer to a pointer to int ( **arr )?: 因为声明int *vector使vector成为指向int的指针,所以它的地址&vector也是一个指针,使它成为pointer to an int pointer(指向a指向 int) 的指针。