0

从我写的以下代码:

#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])可用于计算任何类型的数组长度。

我对吗?

4

2 回答 2

1
  1. 是的,"abcdef"将存储在数组中的类型char元素和静态存储持续时间。
  2. 如果a是一个数组(甚至是 VLA),sizeof(a)/sizeof(a[0])则计算a. sizeof a产生数组的长度a,以字节为单位。请注意,如果a是指向动态分配内存的指针,sizeof将产生指针类型大小,并且当应用于声明为数组类型的参数时,会产生相应指针类型sizeof的大小。
于 2012-07-31T09:54:04.610 回答
1
  1. 是的,如果你写“ABC”,它可以被视为一个字符串,其中每个字符都可以通过索引访问,尽管它不是很漂亮。

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

于 2012-07-31T09:07:08.347 回答