84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
#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呢?