刷题笔记
0o一颗小韭菜o0
这个作者很懒,什么都没留下…
展开
-
C++陷阱:无符号整型size_t类型转换导致数值与预期不符。
预期结果是s.size()-len*words.size()=-1,所以不会进入for循环,但结果却是进入for循环。使用visual studio 2019单步调试,结果如下图,发现 s.size() - len * words.size()=18446744073709551615,数值类型为unsigned _int64。原因:s.size()与words.size()均为size_t是无符号整型,所以-1会默认转换成18446744073709551615,导致进入for循环,与预期结果不一致。原创 2023-12-19 20:59:07 · 402 阅读 · 1 评论 -
C++笔试题:怎么分析\abc,a、b、c均为数字的情况下\abc是否为转义字符?
以\ddd为例:\ddd为八进制转义字符,最大为\377(因为八进制转义字符占八个二进制的字符常量)。尽管3个八进制数最大为777,对应二进制数为1 1111 1111但因为超过八个字符,\ddd最大的二进制数为1111 1111转换成八进制就是\377。根据如下转义字符表,\t、\045(\ddd),所以字符的len5,size=6(字符默认以’\0‘结尾,所以size=len+1).如果是\931则是字符'9','8','7',因为第一个数字已经超过7,明显不可能是转义字符,\不成立。原创 2023-09-28 22:47:41 · 33 阅读 · 0 评论 -
c++笔试题:运算符优先级
将 EAX 寄存器的值与变量 a 的值相乘,结果保存在 EAX 寄存器中(所以EAX的值为16)(ECX + EAX * 8) 并把结果放在 EDX 寄存器中。将变量 a 的值加载到 ECX 寄存器中(a仍旧为4)将寄存器中的值存到a中,所以啊= 4+128=132。将变量 a 的值加载到 EAX 寄存器中。原创 2023-09-25 20:44:20 · 80 阅读 · 1 评论 -
C++笔试题,指针与引用的区别
对于ptr+1的地址值是a的地址值+4(int 4个字节),&a+1的地址值是a的地址值+20。解析:首先a是一个int型数组,所以变量a是指向数组a的指针,则*(a+1)=2;,则ptr指针则是指向a数组的末尾的指针,所以*(ptr-1)=5。当引用+1时,加的是整个变量的大小,所以会指向int数组的末尾。两句红色的地方是关键,第一句红色是引用,,第二局红色是指针。当指针变量+1时,地址值加的是指针变量的大小。&a+1则是指向int数组的末尾的地址。因为ptr指针是指向数字2的指针。这个程序的输出是2,原创 2023-09-22 23:00:59 · 31 阅读 · 0 评论 -
基类指针指向派生类对象时,通过指针调用成员函数的规则
语句3.将基类指针,指向派生类对象。语句4.定义了一个派生类指针pa2..定义了一个派生类B的对象b;定义了一个基类A的指针pa,问题,如下代码的输出。原创 2023-09-20 20:36:48 · 177 阅读 · 0 评论