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

时间:2013-09-27 05:38:44

标签: c pointers

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

struct X {
  int a;
  int b;
};

struct X ** ptr;

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

#include<stdio.h>

struct X {
  int a;
  int b;
};
int main()
{
struct X ** ptr;

unsigned int i=1;
printf("%d",ptr[i]);
return 0;
} 

我得到了输出。

1483736418

这是我尚未定义的指针的垃圾值。

答案 2 :(得分:0)

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