如何通过指针获取数组的大小?

象嘉道*_*象嘉道 3 c pointers

对于以下场景,如何a通过指针获取数组的大小(3)c?解决这类问题的模式是什么?

struct struct_point {
  int x;
  int y;
  int z;
};

typedef struct struct_point point;

int test_void_pointer () {
  point a[3] = {{1, 1, 1}, {2, 2, 2}};
  void * b;
  point * c;
  b = a;
  c = b;
  /* get_size_p (c) */
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 7

你不能.指针只是一个地址,一个数字,它不包含任何有关它指向的数据的信息,除了它的类型.


旁注:这就是为什么他们说"数组衰减到指针".它们"衰减",因为与数组相比,指针本身保存的信息较少.

当nims在将数组传递给函数时在注释中指出,它会自动衰减到指向第一个元素的指针 - 并且sizeof在函数中执行操作不会产生预期的结果.顺便提一下,这里还有一个C FAQ.

  • 只是为了添加一些东西:这就是为什么在将数组作为参数传递给函数时无法确定数组的大小 (2认同)