gpt4 book ai didi

c - 修改指向整数数组的双指针

转载 作者:行者123 更新时间:2023-11-30 18:18:43 25 4
gpt4 key购买 nike

我有一个指向 int *array 的指针,我分配了它,然后将其传递给函数以填充数组的元素。

void function(int **arr);

int main()
{
int *array;
array=calloc(4, sizeof(int));
function(&array);
return0;
}


void function(int **arr)
{
int *tmp;
tmp=calloc(4, sizeof(int));
tmp[0]=1;
tmp[1]=2;
tmp[2]=3;
tmp[3]=4;
}

我想将tmp分配给arr。我该怎么做?

最佳答案

您不应该这样做,因为在这种情况下会出现内存泄漏,因为您已经为指针数组分配了内存,并且赋值将覆盖存储在指针中的值。把函数写得更简单

void function(int **arr)
{
int *tmp = *arr;

tmp[0]=1;
tmp[1]=2;
tmp[2]=3;
tmp[3]=4;
}

这是一个演示程序

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

void init( int **a, size_t n, int value )
{
int *tmp = *a;
size_t i = 0;

for ( ; i < n; i++ ) tmp[i] = value++;
}

void display ( int *a, size_t n )
{
size_t i = 0;

for ( ; i < n; i++ ) printf( "%d ", a[i] );
printf( "\n" );
}

int main(void)
{
int *a;
size_t n = 4;

a = calloc( n, sizeof( int ) );

init( &a, n, 0 );
display( a, n );

init( &a, n, 10 );
display( a, n );

free( a );

return 0;
}

程序输出为

0 1 2 3 
10 11 12 13

如果您需要在函数中重新分配原始数组,则可以按以下方式完成

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

void init( int **a, size_t n, int value )
{
int *tmp = *a;
size_t i = 0;

for ( ; i < n; i++ ) tmp[i] = value++;
}

void display ( int *a, size_t n )
{
size_t i = 0;

for ( ; i < n; i++ ) printf( "%d ", a[i] );
printf( "\n" );
}


void alloc_new( int **a, size_t n )
{
int *tmp = malloc( n * sizeof( int ) );

if ( tmp )
{
free( *a );
*a = tmp;
}
}

int main(void)
{
int *a;
size_t n = 4;

a = calloc( n, sizeof( int ) );

init( &a, n, 0 );
display( a, n );

alloc_new( &a, n );

init( &a, n, 10 );
display( a, n );

free( a );

return 0;
}

关于c - 修改指向整数数组的双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com