C – 索引应用于指向指针的指针

我想问一下当C看到指向指针的索引时C会做什么; 例如:

struct X { int a; int b; }; struct X ** ptr; 

如果声明包含以下内容会发生什么:

 ptr[i] // where i is an unsigned int 

任何指针都可以与数组索引一起使用,因此ptr[i]将是指向struct X的指针。

但是,您必须首先为ptr分配内存,否则您将取消引用未初始化的指针,从而导致未定义的行为。 如果你在没有初始化指针的情况下取消引用ptr[i] ,那么你又会有未定义的行为。

它返回一个垃圾值。 因为“ptr”是指向指针的指针。 你还没有声明它实际指向的是什么。 例如..

 #include struct X { int a; int b; }; int main() { struct X ** ptr; unsigned int i=1; printf("%d",ptr[i]); return 0; } 

我得到了输出。

 1483736418 

这是我没有定义的指针的垃圾值。

指针只有一次derefernced。 这意味着表达式的类型是struct X * 。 现在,您的所有指针都有一个1D指针数组,其中包含第一个2D数组的特定行。