gpt4 book ai didi

c - c中的二维动态int数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:29 25 4
gpt4 key购买 nike

我想创建一个函数,将给定的二维动态 int 数组增加一行。我看了几个网站,指南,教程,但都不一样,所以我现在很困惑。

二维数组有 2 个固定列。

我的代码在这里:

int length=1;
void arrayinc(int** array, int x0, int x1)
{
if (array == NULL)
malloc(array, sizeof(int[2]));
else
realloc(array, (++length)*sizeof(int[2]));

array[length-1][0]=x0;
array[length-1][1]=x1;

free(array);
}

int main()
{
int** array=NULL;
arrayinc(&array, 1, 2);
// I will do some stuff after the increase
}

我希望有人能帮助我,并解释它是如何工作的!

抱歉我的英语和糟糕的 malloc/realloc 知识。

最佳答案

函数参数是它的局部变量。所以在函数中,您处理原始参数的副本。

至少参数应该这样声明

int*** array

如果列数是编译时常量,则可以按以下方式定义函数。

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

#define N 2

size_t arrayinc( int ( **array )[N], size_t n, int x0, int x1)
{
int ( *tmp )[N] = realloc( *array, ( n + 1 ) * sizeof( int[N] ) );

if ( tmp )
{
*array = tmp;
( *array )[n][0] = x0;
( *array )[n][1] = x1;
++n;
}

return n;
}

int main(void)
{
int ( *array )[N] = NULL;
size_t n = 0;

for ( size_t i = 0; i < 10; i++ )
{
n = arrayinc( &array, n, ( int )( 2 * i ), ( int )( 2 * i + 1 ) );
}

for ( size_t i = 0; i < n; i++ )
{
printf( "%d\t%d\n", array[i][0], array[i][1] );
}

free( array );

return 0;
}

程序输出为

0   1
2 3
4 5
6 7
8 9
10 11
12 13
14 15
16 17
18 19

关于c - c中的二维动态int数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49011839/

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