qq_43412960
qq_43412960
采纳率79.1%
2019-10-19 15:43

这是一个关于C语言字符串初始化的问题和if语句问题

5
已采纳
#include<stdio.h>
#include<stdlib.h>
int main()
{int id=0;
int ceshi=2;

char a[20]={'a','baaa','c'};
    for(int num;num<20;num++)
    {   if(a[num='\0'])
            break;
    id++;}
    printf("%d",id);



    system("pause");
return 0;} 

这是我写的一段程序,我由两个疑问。
第一呢,我声明了字符数组a[20]。我觉得每个元素只能是一个字符,但是把baaa写在一起,编译器也不会报错,这个令我觉得奇怪,为什么会这样呢?
第二呢,if 后面接的是a[num='\0'],这是一个数组,不是一个true类型或者false类型的判断条件,这么做的话,什么时候执行if下面包含的语句,是未知的。
这两个问题都是编译器的错误吗?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qtchen_1988 qtchen_1988 2年前
    我这么写:
    char a[20]={'ab','2'};
    编译器不会报错,但会给出警告:minGW编译器
    \test18\main.cpp:12:25: warning: narrowing conversion of '24930' from 'int' to 'char' inside { } is ill-formed in C++11 [-Wnarrowing]
         char a[20]={'ab','2'};
            警告:在c++ 11中,将'24930'从'int'转换为'char'是病态的
            其中24930是a<<8 | b; 说明编译器把它转成int型了。char实质也是int,只是它用字符形式表现出来。
    
            你第二个问题,跟你上一个问题其实是同一个问题,你仔细想就明白了,a[num='\0'];其实就是 
    
    num='\0';
    a[num];<=> a['\0']; 这样就回到你上一个问题b['\0'] == 97问题。
    而你这里也是a[0] 为 a,也就是97。
    然而 if(97) 会永远为真(非0的数字都是真)。true/false其实也是数字,1/0.
    
    

    个人建议:要学会举一反三思维。多思考一下就能明白了,不明白就上机调试,这样学的更快些。

    还有什么问题可以在这里继续问。

    点赞 2 评论 复制链接分享

相关推荐