C 声明动态多维指针

C 声明动态多维指针,c,pointers,C,Pointers,是否可以在运行时声明N维指针?比如,如果[N=2,**p],[N=3,**p],[N=4,**p]等等。如果是,怎么做?可能不是您想要的,但是您可以定义generalvoid*指针,然后根据N来强制转换它们 丑陋的例子: void *genericPtr; if (1 == N) { int *ptr = (int *)genericPtr; // your code here } else if (2 == N) { int **ptr = (int **)generi

是否可以在运行时声明N维指针?比如,如果[N=2,**p],[N=3,**p],[N=4,**p]等等。如果是,怎么做?

可能不是您想要的,但是您可以定义generalvoid*指针,然后根据N来强制转换它们

丑陋的例子:

void *genericPtr;
if (1 == N) {
    int *ptr = (int *)genericPtr;
    // your code here
} else if (2 == N) {
    int **ptr = (int **)genericPtr;
    // your code here
}

您可以声明一个指针,一个指向该指针的指针,再声明另一个指向该指针的指针,…,没问题。请标记这是用于哪种语言的?谢谢。不,这是不可能的。在C语言中,除了数组维度的实际长度外,所有表达式的类型在编译时都必须是已知的。还要注意:在C语言中,成为一名三星级程序员不一定是一种恭维。您需要一个N维指针(然后不是干净的)还是N维数组(然后是的,只需计算内存中的偏移量并使用一个简单的指针)?假定
genericPtr
实际上指向包含该类型数据的有效内存。上面,您只显示了未初始化指针的强制转换。我想这只是一个如何使用空指针的例子。是的,只是一个演示。这是一个糟糕的方法。你讨厌编译器完全绕过类型检查吗?它极易出错。另外,
int**
不能表示2D数组。首先,我写了一个丑陋的例子。第二,int**可以表示指向数组的指针数组,这是一种2D数组。第三个问题是,如果没有任何2D阵列,是否可能。