C++ 指针对指针的实际用途?

C++ 指针对指针的实际用途?,c++,c,pointers,C++,C,Pointers,我在书中看到过演示指针的示例代码,如int****ptr,int****ptr,等等。有哪些实际示例可以使用这种方法?它们主要用于动态分配的多维数组 例如: int width = 100, height = 2, depth = 50; int*** array3d; array3d = new int**[width]; for (int x = 0; x < width; ++x) { array3d[x] = new int*[height]; for (int y

我在书中看到过演示指针的示例代码,如
int****ptr
int****ptr
,等等。有哪些实际示例可以使用这种方法?

它们主要用于动态分配的多维数组

例如:

int width = 100, height = 2, depth = 50;
int*** array3d;
array3d = new int**[width];
for (int x = 0; x < width; ++x) {
    array3d[x] = new int*[height];
    for (int y = 0; y < height; ++y) {
        array3d[x][y] = new int[depth];
    }
}

// Now array3d can be used like this:
array3d[42][0][1] = 666;
int宽度=100,高度=2,深度=50;
int***阵列3D;
array3d=新整数**[宽度];
对于(int x=0;x
我用得最多的是
char***

我正在分析一个文件,必须将其拆分为每行字

所以你有:

char*** parsed_file;
char** first_line = parsed_file[0];
char* first_word_of_first_line = first_line[0];

这样的指针很少使用,我敢打赌,在使用它们的绝大多数情况下,可以通过重组代码使其更简单来避免它们。(而且更易于理解和维护。)


然而,指针(*p)和指向指针(*p)的指针非常常见,这意味着语言必须提供声明至少这些,因此,绝对没有理由在两个间接级别上设置任意限制,也没有理由禁止任何人声明更多的间接级别。

另一个您将遇到多个间接级别的地方是当您需要一个函数来写入指针参数时。假设以下代码:

void bar( T *arg )
{
  *arg = new_value(); // write new value to what arg points to
}

void foo( void )
{
  T x;
  bar (&x);  // write new value to x
}
用指针类型替换
T

void bar( Q **arg )
{
  *arg = new_value(); // write new value to what arg points to
}

void foo( void )
{
  Q *x;
  bar (&x);  // write new value to x
}
void bar( R ***arg )
{
  *arg = new_value(); // write new value to what arg points to
}

void foo( void )
{
  R **x;
  bar (&x);  // write new value to x
}
用另一种指针类型替换
Q

void bar( Q **arg )
{
  *arg = new_value(); // write new value to what arg points to
}

void foo( void )
{
  Q *x;
  bar (&x);  // write new value to x
}
void bar( R ***arg )
{
  *arg = new_value(); // write new value to what arg points to
}

void foo( void )
{
  R **x;
  bar (&x);  // write new value to x
}
等等等等等等


这三种情况的语义都是相同的;我们正在向
x
写入一个新值。唯一改变的是
x的类型和间接寻址的级别数

当你真的希望你的同事讨厌你时,你会使用这种类型的论点。代码混淆?:-)多维数组。字符串数组作为输出参数。你是问C还是C++?我认为C++中没有一个以上的间接指向的好理由;如果你想用一个友好的类包装一个指针(并且在可能的情况下更喜欢引用),那么为什么我们要使用多维数组呢?例如,使用多维数组的示例有哪些?例如,游戏中的级别是一个二维平铺平面,您希望通过其索引轻松访问平铺,例如
map[x][y]
。实际上,相当多的应用程序。例如,在3D世界中,您可以将其用于体素数据或流体模拟等。由于C通常使用最后一个维度作为“宽度”(如矩阵中的列数),因此该示例可能应该交换深度和宽度的使用,以便最后一个维度是指向整数(列)数组的指针,中间维度是指向数组(行)指针数组的指针,…@rcgldr但按以下顺序访问维度不是更合乎逻辑:x,y,z,而不是z,y,x?
error\u code get_parsed_文件(char****result)
error\u code get_parsed_目录(char****result)
@Yakk迫不及待地想看到
解析硬盘驱动器
解析虚拟机