84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
#include<iostream> #include<iomanip> #include<cstring> #include<cstdio> using namespace std; int main() { bool c[30]; memset(c,-1,sizeof(c)); cout<<sizeof(bool)<<endl; cout<<sizeof(c)<<endl; cout<<c[0]<<endl; }
输出是 1 30 255 为什么呢?
走同样的路,发现不同的人生
首先,bool型和char型一样,是占一个字节的存储空间 所以sizeof(bool)是1 而sizeof(c)是运算整个数组的大小,自然是1*30=30 而c[0]取的是数组第一个值,而这个值又被memset为-1了 同时cout是没法直接输出bool型的,只能将bool型强制类型转换为unsigned char来输出,所以-1转换为unsigned char当然就是255
另外第三种情况是毫无意义的,这种在实际情况用不到,或者避免用到的情况不知道也没关系,跟把一堆运算符丢到一句里面,然后判断最终运算的结果是什么一样没有意义,实际的程序中没有谁(2B程序员除外)会把代码故意写得很生涩。如果要用cout输出bool型,也会是cout<<c[0]?"true":"false";这样
用std::fill 不应该依赖bool的实现特性
既然准备要用C++了,就要尽可能的靠着C++的风格来。
std::fill是一个非常完美的选择,为什么还要尝试使用C的memset呢?
首先,bool型和char型一样,是占一个字节的存储空间
所以sizeof(bool)是1
而sizeof(c)是运算整个数组的大小,自然是1*30=30
而c[0]取的是数组第一个值,而这个值又被memset为-1了
同时cout是没法直接输出bool型的,只能将bool型强制类型转换为unsigned char来输出,所以-1转换为unsigned char当然就是255
另外第三种情况是毫无意义的,这种在实际情况用不到,或者避免用到的情况不知道也没关系,跟把一堆运算符丢到一句里面,然后判断最终运算的结果是什么一样没有意义,实际的程序中没有谁(2B程序员除外)会把代码故意写得很生涩。如果要用cout输出bool型,也会是cout<<c[0]?"true":"false";这样
用std::fill
不应该依赖bool的实现特性
既然准备要用C++了,就要尽可能的靠着C++的风格来。
std::fill是一个非常完美的选择,为什么还要尝试使用C的memset呢?