#include <stdio.h>
int main(void)
{
char b[5];
scanf("%4s%4s", b, b);
printf("%s", b);
}
标量对象的确切定义是什么?在这种情况下,b
是标量对象吗?
根据c11标准,“算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型
所以不,b
不是标量,因为它是一个数组。如果它是一个数字或指针(如char*b
),它将是一个标量类型。
引用自ISO/IEC 9899:2018 (C18),6.2.5(类型)/21:
“算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型。47)”
47) “请注意,聚合类型不包括联合类型,因为具有联合类型的对象一次只能包含一个成员。
“标量对象的确切定义是什么?”
标量对象是仅由单个实体组成的对象,例如指针和算术类型的对象。
“在这种情况下,b
是标量对象吗?”
< code>b不是标量对象,因为标量对象只保存一个实体。像< code>b这样的数组是“集合”。< code>scanf中的数组指针衰减(" %4s%4s ",b,b);和< code>printf("%s ",b);不会改变< code>b仍然是数组类型。