qq_43412960 2019-10-19 15:43 采纳率: 78.6%
浏览 238
已采纳

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

#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 2019-10-19 16:15
    关注
    我这么写:
    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.
    
    

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退