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

C 关于字符串文字和数组元素数的一些结论,请给出您的看法,c,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")); 我的结论是: 字符串literal“abcdef”是一个char数组 sizeof(a)/s

我写了以下代码:

#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"));
我的结论是:

  • 字符串literal
    “abcdef”
    是一个
    char
    数组
  • sizeof(a)/sizeof(a[0])
    可用于计算任何类型的数组长度
  • 我说得对吗

  • 是的,如果你写“ABC”,它可以被视为一个字符串,其中每个字符都可以通过索引访问,尽管它不是很漂亮

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

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

  • @AndersK Oblig:仅供参考,您应该用括号括住宏定义,这样您就不会遇到操作顺序问题。