c - 如何将字符指针分配给字符变量?

标签 c

呸!我有以下代码:

#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/

相关文章:

c - 写入在文件中产生奇怪的结果

c - 在跨平台应用程序中使用 snprintf

c - 将数组(结构成员)传递给函数

c - 编写一个函数,反转第一列和最后一列的数组元素

c - 如何从文本文件中读取值并将它们存储在两个不同的数组中?

C - 从终端读取多个输入以在 block 中进一步使用

c - 程序不工作。编译并运行正常,但如果我输入一个数字,它就会崩溃

android - 从内存调试中隐藏 C 中的 char 数组值

c - 如何在终端中用c语言打印一组随机字母?

c - 将结构项作为参数传递