gpt4 book ai didi

c - 如何使用指向数组的指针访问未知大小的二维数组

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

我正在为新项目修改现有代码。我被指示删除动态内存分配并使用静态声明。

有一个变量arrp,之前它是一个双指针,将使用malloc为其分配内存,并将作为二维数组进行访问。

现在我已将其更改为指向数组的指针,即: char (*arrp)[];

arrp 指向的二维数组的大小只有在运行时才知道。我的问题是,如果未声明大小,编译器会抛出错误('char(*)[]':未知大小)

请引用下面的代码,我做了这样的事情

char (*arrp)[]; //This will be from different module, 
//I have declared as local variable for our reference

char (*parr)[2];

char arr[3][2];

parr = &(arr[0]);
arrp = (char (*)[])&(arr[0]);

//inside loops for i, j
...

printf("%c",parr[i][j]); // This works fine
printf("%c",arrp[i][j]); // Error :'char (*)[]' : unknown size)

....
//Some code

声明 arp 时无法获取数组的大小。有什么办法可以消除这个错误吗?

最佳答案

指向数组的指针有助于一次跳过整个数组。 (即使用单个增量)它通过了解要跳转的数组的列宽来完成此操作。因此,如果不知道列大小,恐怕您指向数组的指针对您来说就没用了。

但是如果你有一个支持可变长度数组(C99)的现代编译器,那么它就很简单

int foo ( int m, int n )
{
int a[m][n];
int (*ptr)[n]=a;
a[0][2] = 78;
printf("%d", ptr[0][2]);

}

关于c - 如何使用指向数组的指针访问未知大小的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10121600/

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