好的,我有一个静态分配的多维数组。我非常想获得指向其中一部分的指针,并使用该指针访问其余部分。基本上,我希望能够做这样的事情:
#include <stdio.h>
#include <string.h>
#define DIM1 4
#define DIM2 4
#define DIM3 8
#define DIM4 64
static char theArray[DIM1][DIM2][DIM3][DIM4] = {0};
int main()
{
strcpy(theArray[0][0][0], "hello world");
char** ptr = theArray[0][0];
printf("%s\n", ptr[0]);
return 0;
}s
此代码使用 gcc 时会导致此错误:
t.c: In function ‘main’:
t.c:17: warning: initialization from incompatible pointer type
char**
显然不是此处使用的正确类型。我认为这是因为静态分配的数组在内存中创建为单个 block ,而动态分配的数组在内存中是分开的,每个维度都有一个指向下一个维度的指针。
但是,正如您可能已经注意到的那样,这里的维数非常大,而且我显然需要使用实际变量来索引数组而不是漂亮、纤细的字符 0,所以它会变得很痛苦long 在实际代码中索引数组。我非常希望有一个指向要使用的数组的指针,这样访问数组就不会那么痛苦了。但我想不出正确的语法——如果有的话。因此,任何帮助将不胜感激。谢谢。
最佳答案
theArray[0][0]
去掉了前两个维度,因此您得到了 char [DIM3][DIM4]
类型的东西。当数组衰减为指针时,第一维将丢失,因此您需要的声明是:
char (*ptr)[DIM4] = theArray[0][0];
值得一提的是,gcc 还会为您的数组声明显示一条警告:“警告:初始值设定项周围缺少大括号”。静态变量和全局变量将自动初始化为 0,因此您可以通过删除初始化程序来修复警告:
static char theArray[DIM1][DIM2][DIM3][DIM4];
关于c++ - 指向多维静态分配数组部分的指针的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562060/