打印时 C 程序中的意外输出
Unexpected output in C program when printing
假设包含所有头文件。
void main() {
int i;
clrscr();
printf("india"-'A'+'B');
getch(); }
以下函数的输出是:ndia
任何人都可以向我解释一下这个输出吗?
int printf(const char *restrict format, ...);
当您执行 format - 'A' + 'B'
时,考虑到 A
和 B
.
的 ASCII 值,它等于 format + 1
format
是基地址,当您执行 format + 1
时,它指向该字符串的第二个内存位置,并从那里开始打印,即 ndia
.
表达式 "india"-'A'+'B'
在任何理智的代码中都没有意义。但它会(但见下文)导致指向第二个元素的指针,因为 'B' - 'A'
将计算为 1
.
但是,子表达式 "india"-'A'
将调用未定义的行为,因为结果指针将指向数组外部。这在这里解释:
如果我们稍微改写并添加括号:"india"+('B'-'A')
表达式定义明确并等于 "india" + 1
假设包含所有头文件。
void main() {
int i;
clrscr();
printf("india"-'A'+'B');
getch(); }
以下函数的输出是:ndia
任何人都可以向我解释一下这个输出吗?
int printf(const char *restrict format, ...);
当您执行 format - 'A' + 'B'
时,考虑到 A
和 B
.
format + 1
format
是基地址,当您执行 format + 1
时,它指向该字符串的第二个内存位置,并从那里开始打印,即 ndia
.
表达式 "india"-'A'+'B'
在任何理智的代码中都没有意义。但它会(但见下文)导致指向第二个元素的指针,因为 'B' - 'A'
将计算为 1
.
但是,子表达式 "india"-'A'
将调用未定义的行为,因为结果指针将指向数组外部。这在这里解释:
如果我们稍微改写并添加括号:"india"+('B'-'A')
表达式定义明确并等于 "india" + 1