有人可以指导我如何制作这些答案。对于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
答案 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。