2

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

struct X {
  int a;
  int b;
};

struct X ** ptr;

如果语句包含以下内容会发生什么:

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

3 回答 3

3

任何指针都可以与数组索引一起使用,ptr[i]指向struct X.

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

于 2013-09-27T05:43:59.373 回答
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

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

于 2013-09-27T05:45:29.163 回答
0

指针仅被取消引用一次。这意味着表达式的类型是struct X *。您现在有一个 1D 指针数组,指向所有指针,其中包含第一个 2D 数组的特定行。

于 2013-09-27T05:46:20.020 回答