根据我写的以下代码:
#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"));
我的结论是:
"abcdef"
是char
数组; sizeof(a)/sizeof(a[0])
可用于计算任何类型的数组长度。我是对的吗?
答案 0 :(得分:1)
是的,如果你写“ABC”,它可以被视为一个字符串,其中每个字符都可以用索引访问,虽然它不是很漂亮。
如果“array”是一个数组然后是,它将返回元素的数量,但是参数是一个指针,它不会返回正确的值,因为sizeof将返回指针的大小而不是大小数组。
答案 1 :(得分:1)
"abcdef"
将存储在char
个元素和静态存储持续时间的数组中。a
是一个数组(甚至是VLA),sizeof(a)/sizeof(a[0])
会计算a
的元素数。 sizeof a
生成数组a
的长度,以字节为单位。请注意,如果a
是指向动态分配的内存的指针,sizeof
将产生指针类型大小,并且当应用于声明具有数组类型的参数时,sizeof
将产生各种指针类型的大小。