关于字符串文字和数组元素数的一些结论,请给出您的意见

时间:2012-07-31 09:01:54

标签: c

根据我写的以下代码:

#define ELEMENTS_NUMBER_OF(array) (sizeof(array) / sizeof(array[0]))


printf("\"abcdef\"[0]: %c\n", "abcdef"[0]);
printf("elements number of \"abcdef\" is %d\n", ELEMENTS_NUMBER_OF("abcdef"));

我的结论是:

  1. 字符串文字"abcdef"char数组;
  2. sizeof(a)/sizeof(a[0])可用于计算任何类型的数组长度。
  3. 我是对的吗?

2 个答案:

答案 0 :(得分:1)

  1. 是的,如果你写“ABC”,它可以被视为一个字符串,其中每个字符都可以用索引访问,虽然它不是很漂亮。

  2. 如果“array”是一个数组然后是,它将返回元素的数量,但是参数是一个指针,它不会返回正确的值,因为sizeof将返回指针的大小而不是大小数组。

答案 1 :(得分:1)

  1. 是的,"abcdef"将存储在char个元素和静态存储持续时间的数组中。
  2. 如果a是一个数组(甚至是VLA),sizeof(a)/sizeof(a[0])会计算a的元素数。 sizeof a生成数组a的长度,以字节为单位。请注意,如果a是指向动态分配的内存的指针,sizeof将产生指针类型大小,并且当应用于声明具有数组类型的参数时,sizeof将产生各种指针类型的大小。