小C ++代码让我头疼

时间:2014-03-22 06:52:32

标签: c++ arrays

请考虑这个简短的C ++代码

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
    clrscr();
    char arr[]="MQMHSJKLSUGDUGIGIUDKLKO";
    for(int i=0;i<5;i++)
    {
       if(i%2==0)
       {
           cout<<arr[i];
       }
    }

    char a[]={'78','45','21','5'};
    cout<<(int)a;
    getch();
}

输出为'MMS 18'

从第一个循环中可以看出彩信,但第二个循环的输出“18”是多少? 即使你改变数组元素,答案仍然是18。 请解释一下!

2 个答案:

答案 0 :(得分:9)

a转换为指向其第一个元素的指针。您试图通过将第一个元素的地址强制转换为int来打印它。结果可能会因编译器而异。

答案 1 :(得分:0)

&#39;一个&#39;表示数组中第一个元素的地址。
就好像在你的代码中,数组的第一个元素的地址是&#39; a&#39;是18.如果你尝试* a而不是它会给你答案为78.你期望的代码可能是

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
    clrscr();
    char arr[]="MQMHSJKLSUGDUGIGIUDKLKO";
    for(int i=0;i<5;i++)
    {
        if(i%2==0)
        {
           cout<<arr[i];
        }
    }

    char a[]={'78','45','21','5'};
    cout<<(*a);
    getch();
}