在这种情况下,b是标量对象吗? #包括 内部主(空) { charb[5]; scanf(“%4s%4s”,b,b); printf(“%s”,b); }

在这种情况下,b是标量对象吗? #包括 内部主(空) { charb[5]; scanf(“%4s%4s”,b,b); printf(“%s”,b); },c,arrays,object,pointers,scalar,C,Arrays,Object,Pointers,Scalar,标量对象的确切定义是什么? 在这种情况下,b是标量对象吗?根据“算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型” 所以不,b不是标量,因为它是一个数组。如果它是一个数字或指针(如char*b),它将是一个标量类型。引用ISO/IEC 9899:2018(C18),6.2.5(类型)/21: “算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型。47)” 47)“请注意,聚合类型不包括联合类型,因为具有联合类型的对象一次只能包含一个成员。” “标量对象的确切定义是什么

标量对象的确切定义是什么? 在这种情况下,
b
是标量对象吗?

根据“算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型”


所以不,
b
不是标量,因为它是一个数组。如果它是一个数字或指针(如
char*b
),它将是一个标量类型。

引用ISO/IEC 9899:2018(C18),6.2.5(类型)/21:

“算术类型和指针类型统称为标量类型。数组和结构类型统称为聚合类型。47)”

47)“请注意,聚合类型不包括联合类型,因为具有联合类型的对象一次只能包含一个成员。”


“标量对象的确切定义是什么?”

标量对象是仅由单个实体组成的对象,例如指针和算术类型的对象

“在这种情况下,
b
是标量对象吗?”


b
不是标量对象,因为标量对象只包含一个实体。像
b
这样的数组是“聚合”。
scanf中的数组到指针衰减(“%4s%4s”,b,b)
printf(“%s”,b)
不会改变
b
仍然是数组类型。

@Ed Heal但
b
不是指向基址的指针吗?在这种情况下,
b
是数组,而不仅仅是指针。如果它像
char*b
@Daniel Giger那样声明,那么它将是一个常规指针。谢谢。C11标准是。请仔细阅读“如果标量对象上的一个副作用相对于同一标量对象上的另一个副作用是未排序的,则行为是未定义的。”-因此这不适用于语句
scanf(“%4s%4s”,b,b)的情况
因为
b
不是标量对象,对吗?@NirajRaut完全支持Monica Celio谢谢。@NirajRaut您不能用
char
符号打印负ASCII码,因为没有。所有ASCII值均为正值。->你想用这句话实现什么?@NirajRaut这里发生的奇迹就是因为
EOF
。它不是一个字符,而是一个表示函数返回错误的符号。-要将错误与常见字符区分开来,它必须是负值。
EOF
的确切负值由实现定义。
#include <stdio.h>

int main(void) 
{
    char b[5];
    scanf("%4s%4s", b, b);
    printf("%s", b);
}