C语言printf小问题

代码如下:
int main(void)
{
char c1='b',c2='e';
printf("%d,%cn",c2-c1,c2-'a'+"A");
return 0;
}

为什么我在编译的时候不会报错呢?而且都有结果?后面的c2-'a'+"A"不是int型加char*型字符串吗?这样能加吗?若能加请大牛说明下理由,请问为什么呢?

阅读 4k
5 个回答

我使用gcc是编译不过的,下面是调整后可以通过编译的代码。这下应该可以看清楚了吧。

#include <stdio.h>

int 
main(void)
{
    char c1 = 'b';
    char c2 = 'e';

    printf("%d, %c\n",
            c2 - c1,
            *((char *)(c2 - 'a' + "ABCDEFGHIJKLMN")));
            
     printf("%d, %c\n",
            c2 - c1,
            "ABCDEFGHIJKMN"[c2 - 'a']);

    return 0;
}

发生了隐式转换,字符会转换成字母的ascii码值,是整型数,如果你是printf%d 那么结果是两个ascii码相加减,如果你是printf %c 会把加减后的ascii转换成对应的字母

新手上路,请多包涵

可以加,隐式类型转换了

'a' + "A" 是啥? 一个是char是个是char*.

int + char* 当然能加,加出来就是char*啊,C语言字符串处理的基础动作,指针基础啊。
比如 char* str = "balabala"; *(str+1)就是str[1]也就是字符a*(str+2)就是字符l


谁踩我啦,给出理由啊。
题主这代码有问题肯定是有问题,char*是不能用%c打印的,也字符串越界了。但是这里确实是一个数和一个指针相加,属于指针基础知识。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题