std :: cout和printf数组

ser*_*hii 0 c c++ printf cout format-specifiers

    int arrSize = 10;
    double* arr = new double [arrSize];
    for(int i = 0; i < arrSize; i++){
        arr[i] = i;
    }
    for(int i = 0; i < arrSize; i++){       
        printf("%d", arr[i]);
        //std::cout<<arr[i];
    }
Run Code Online (Sandbox Code Playgroud)

这里

  • printf() 打印0000000000.
  • cout 打印0123456789.

为什么?

Nat*_*tta 5

对任何特定参数使用错误的格式说明符会printf()调用未定义的行为.

arr是一个double数组,因此arr[i]产生一个double类型值.你需要%f格式说明符来打印它.如果您使用%d打印a double,您的程序面向UB并且结果不合理,可以是任何内容.

OTOH中,<<使用cout是可以过载的操作者适应基于所提供的变量的类型.因此,它按预期打印输出.