无法理解这个输出

时间:2013-12-05 01:44:57

标签: c++

有人可以指导我如何制作这些答案。对于ii。)为什么字母变成数字?对于iii。)这里发生了什么?

问题23:假设一个名为prog.cpp的C ++程序被编译并在金星上正确执行并带有指令:

金星> g ++ prog.cpp

金星> a.out file1 file2 file3

对于程序的以下每个短段,prog.cpp准确写出产生的输出。每个答案都应包含由程序的给定部分打印的符号,而不是其他任何符号。

(ⅱ)

char a = ’a’;

while (a <= ’f’) {

   cout << ’a’ - a;

   a = a + 1; }

答案: 0-1-2-3-4-5

(III)

int main(int argc, char *argv[]) {
   cout << argc;

答案: 4

3 个答案:

答案 0 :(得分:1)

a-'a' 

返回一个数字,因为从变量a的ASCII值中减去了char a的ASCII数,即97。因此,ASCII值的差异将打印为整数。

第二种情况,argc打印运行程序时命令行参数的数量。

答案 1 :(得分:0)

cout << ’a’ - a;

这实际上是一个非常有趣的案例。显然,值应为0,然后是-1,然后是-2等,但如果cout那些char类型的数字(例如cout << char(0) << char(-1);),您将获得“垃圾” (或者没有任何东西)在你的终端上 - 0是一个不可打印的NUL字符,而(char)-1,(char)-2可能最终被渲染为一些奇怪的图形字符(例如空白和每个{{的方形点) 3}})...

它们被打印为可读数字的原因是'a' - a表达式评估为int类型 - 而不是char - 并且int打印在一个人类可读的数字格式。

'a'char类型的字符文字,使用ASCII值97进行编码。a是一个变量,但也是char类型。然而,在可以从另一个中减去一个之前,他们会进行积分促销以键入int;来自C ++ 11标准:

  

4.5整体促销[conv.prom]   1除bool,char16_t,char32_t或wchar_t之外的整数类型的prvalue,其整数   转换等级(4.13)小于可以转换的int的等级   如果int可以表示的所有值,则为int类型的prvalue   来源类型;否则,源prvalue可以转换为a   unsigned int的类型的prvalue。

鉴于4.13说char的排名低于int,这意味着如果需要,char 可以转换为int,但为什么是它需要吗?

编译器的概念提供int operator-(int, int)函数但没有char operator-(char, char),并强制减去两个char值,以便{ {1}}运营商在进行积分促销活动后。

答案 2 :(得分:0)

(ⅱ)

char a = ’a’;
while (a <= ’f’) {
   cout << ’a’ - a;
   a = a + 1; 
}`

答案:0-1-2-3-4-5

说明: 这是一个循环,它会考虑'a'的ascii值并将其与'f'进行比较。因此,循环将从'a'进展到'f'并终止于'f'。 在循环内部,它将从'a'的ascii值中减去变量a的值,因此您可以看到1-2-3-4-5。为了更好地理解这一点,您可以在每个语句之前放置print语句

(III)

int main(int argc, char *argv[]) {
   cout << argc;
}

答案:4

说明:由于答案为4,我认为没有语法错误,这只是函数中的一个类型(问题'}'中的结束括号) argv - 指向字符的指针数组 argc - 这是argv中元素的数量

当您运行可执行文件时,您传递了一些命令行参数,这些参数将存储在argv中,并且元素的计数/数量将存储在argc中。 argc是4表示它被称为myexe.exe param1 param2 param3,其中params是3个参数以及myexe.exe使计数为4。