C和c++的不同行为
C and C++ difference behavior
本文关键字:c++ 更新时间:2023-10-16
我用CDT插件在Eclipse中创建了两个模板项目(一个是C项目,另一个是c++),并编译了两个非常相似的项目(对我来说),但我得到了完全不同的控制台输出。为什么输出如此不同?C代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
int n;
for (n=0; n<5; n++)
printf("%c ",numbers[n]);
return EXIT_SUCCESS;
}
输出一些垃圾
c++代码:#include <iostream>
using namespace std;
int main() {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << " ";
return 0;
}
输出10,20,30,40,50
您将int
打印为c中的char
。
printf("%c ",numbers[n]);
printf("%d ",numbers[n]);
您试图将数字作为字符输出,从而导致奇数输出。代码对我来说工作得很好,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
int n;
for (n=0; n<5; n++)
printf("%d ",numbers[n]);
return EXIT_SUCCESS;
}
注意%d,而不是%c
打印整数的ASCII值。试着
printf("%i", numbers[n])
代替
printf("%c", numbers[n])
您需要%d打印整数,%c打印c
http://www.cplusplus.com/reference/cstdio/printf/看下面的语句
printf("%c ",numbers[n]);
您使用%c来打印int,这是错误的。
具体来说,printf是从C语言借来的,有一些限制。最常提到的printf限制是类型安全,因为它依赖于程序员正确匹配格式字符串和参数。来自varargs环境的第二个限制是,您不能使用用户定义的类型扩展行为。printf知道如何打印一组类型,这就是您将从中得到的全部内容。尽管如此,对于它可以用于的少数事情,使用printf来格式化字符串比使用c++流更快更简单。
相关文章:
- 没有找到相关文章