为什么在用C语言将不同类型的值存储在数组中时没有出现错误?
代码如下:为什么在用C语言将不同类型的值存储在数组中时没有出现错误?,c,arrays,C,Arrays,代码如下: int a[3]={3,5,'s'}; printf("%d%c",a[1],a[2]); 我像这样用gcc编译它 gcc test.c -o test 它工作正常,输出: 5s 我想我应该得到一个错误,因为我在整数数组中有一个字符。 这里发生了什么?当您执行“s”时,您正在处理ASCII值 int a[3]={3,5,'s'}; 在上述情况下,“s”的ACII值将插入到115的数组中 使用%c时,您正在打印与ASCII 115等效的字符。您
int a[3]={3,5,'s'};
printf("%d%c",a[1],a[2]);
我像这样用gcc编译它
gcc test.c -o test
它工作正常,输出:
5s
我想我应该得到一个错误,因为我在整数数组中有一个字符。
这里发生了什么?当您执行“s”时,您正在处理ASCII值
int a[3]={3,5,'s'};
在上述情况下,“s”的ACII值将插入到115的数组中
使用%c时,您正在打印与ASCII 115等效的字符。您正在声明一个可以容纳3个整数的整数数组,前两个没有问题,但您会与第三个的“s”混淆,因为它是char类型 在C中,字符大小为1字节,整数端为2/4字节,具体取决于体系结构 在C中,ASCII是用来表示字符的,ASCII只不过是一个同意映射同一字符的整数,例如小的“s”是数字115,所以当你存储“s”时,它存储的是115,这是一个整数
作为实验,将97存储为一个整数,并在printf中使用%c,然后在c中查看输出,字符文本为int类型,请参见其中的¨2整型字符常量是一个包含在单引号中的一个或多个多字节字符的序列,…-¨10:整型字符常量具有int类型。因此,执行
int a[3]={3,5,'s'};
不会有问题的。实际存储值通常为115,这是与“s”等效的ASCII值
printf("%d%c",a[1],a[2]);
%c将打印对应于115的字符
printf("%d%d",a[1],a[2]);
将为您提供与“s”对应的整数值
请参阅下面的程序
#include <stdio.h>
int main(void)
{
int a[3] = {3, 5, "s"};
printf("%d%s",a[1],a[2]);
}
这将不会编译,因为s被视为两个元素的字符数组。作为字符的“s”将自动转换为int。@dms No。它是intAh类型!学习了一些新的东西,谢谢,因为它是char-No类型。“s”是int类型。您可以使用sizeof的“s”来验证这一点,它将输出与SizeOfint相同的值。请注意,C与ASCII无关,尽管ASCII通常是;主要是使用的代码集。字符集不仅仅是ASCII。@thebusybee至少在OP的情况下是这样的。我在这里不是要涵盖整个角色集。我们不知道OP使用的是哪个角色集。我希望现在每个人都知道UTF,不要将程序限制为ASCII。此外,我们没有讨论源字符集和执行字符集之间的区别。实际上,我使用的是C编译器,源代码使用ASCII,执行时使用另一个字符集。在后一种设置中,仅大写字符直接跟在数字后面,因此“A”==“9”+1。
#include <stdio.h>
int main(void)
{
int a[3] = {3, 5, "s"};
printf("%d%s",a[1],a[2]);
}