c - 数组指针如何存储它的大小?

标签 c arrays pointers

<分区>

#include "stdio.h"

#define COUNT(a) (sizeof(a) / sizeof(*(a)))

void test(int b[]) {
  printf("2, count:%d\n", COUNT(b));
}

int main(void) {
  int a[] = { 1,2,3 };

  printf("1, count:%d\n", COUNT(a));
  test(a);

  return 0;
}

结果很明显:

1, count:3
2, count:1

我的问题:

  1. 声明“a”时,长度(计数/大小)信息存储在哪里?
  2. 为什么将“a”传递给 test() 函数时长度(计数/大小)信息会丢失?

最佳答案

C语言中没有“数组指针”这种东西。

大小不存储在任何地方。 a不是指针,aint[3]类型的对象,这是编译器在编译时众所周知的事实.因此,当您要求编译器在编译时计算 sizeof(a)/sizeof(*a) 时,编译器知道答案是 3

当您将 a 传递给函数时,您有意要求编译器将数组类型转换为指针类型(因为您将函数参数声明为指针)。对于指针,您的 sizeof 表达式会产生完全不同的结果。

关于c - 数组指针如何存储它的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524862/

相关文章:

c - 神经网络反向传播问题

c++ - Bison 将 C 函数指针作为函数调用?

C99: "int const *ptr"是什么意思?

c++ - 查找特定函数可以访问的代码

c - 在 C 中处理多个输入的输出

php - 在 Mysqli 准备语句中返回一个数组

ios - 在数组中创建 uiimageView 的问题

javascript - 将提示输入保存到数组中并从中读取

c++ - 为什么我的好友类不能访问私有(private)成员?

c - 在函数调用期间将哪些值压入堆栈?