呸!我有以下代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char t[10] = "John";
char x = t;
printf("%c\n", x);
return 0;
}
编译器怎么能不给我报错呢?此外,printf 语句输出不同的结果。究竟是什么被分配给了变量 x?
最佳答案
如果编译时出现警告,您将收到以下投诉:
warning: initialization makes integer from pointer without a cast [enabled by default]
编译不会失败的原因是因为在幕后发生了三件事:
- 首先数组衰减为指针(数组和指针不相同,但数组在必要时“衰减”为指针),
- 然后该指针被转换为整数,
- 最后将整数转换为
char
并分配给x
。
从整数到字符的转换不是问题(而且它一直在发生,因为 C 中的字符常量实际上是 int
),但是将指针转换为整数很少是问题程序员的意图,因此警告。这不是严格意义上的错误,但也不是很有意义。
所以最后 printf
打印 t
第一个元素地址的剩余部分。
关于c - 如何将字符指针分配给字符变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712736/