c++ - 指向多维静态分配数组部分的指针的语法

标签 c++ c arrays pointers

好的,我有一个静态分配的多维数组。我非常想获得指向其中一部分的指针,并使用该指针访问其余部分。基本上,我希望能够做这样的事情:

#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/

相关文章:

c++ - 如何在 QHBoxLayout 左、中、右对齐子项

c - printf() 中的 scanf() 如何工作?

arrays - 使用最小堆实现排序数组的 K 路合并

c++ - 使用 ssh 远程机器上的 Netcat

c++ - 守护进程套接字在后台监听请求

c++ - 类声明或定义中的静态变量?

c# - C++ 到 C# : Pointers & Arrays

c 从指针打印

c - 像阅读文本一样逐行阅读图像

c - 将整数存储在 char 数组中