7-25日牛客网刷题 未知点、错题 集合
1.在C++11標(biāo)準(zhǔn)的語(yǔ)法中,auto被定義為自動(dòng)推斷變量的類型。
例如:
auto?x=5.2;?//這里的x被auto推斷為double類型
?
2.注意點(diǎn):
C語(yǔ)言中最簡(jiǎn)單的數(shù)據(jù)類型包括:整型、實(shí)型、字符型
實(shí)型,也稱浮點(diǎn)型
C語(yǔ)言中布爾型是使用0,1表示,不存在布爾類型
另外一個(gè)可惱的是C語(yǔ)言不存在string類型,是char數(shù)組,\0結(jié)束
?
3.
c++中,聲明const int i,是在哪個(gè)階段做到 i只可讀的?
編譯
解析:
在c++中 const修飾的變量是常量,分配在全局區(qū)的常量區(qū),
而我們的全局區(qū)和代碼區(qū)?編譯完 就已經(jīng)確定,
只有棧區(qū)和堆區(qū)才是運(yùn)行時(shí)分配的。?
?
4.
錯(cuò)題:
?
unsigned?int k =?20;
while (k >=?0)
--k;
?
死循環(huán)
解析:
k是無(wú)符號(hào)整數(shù),永遠(yuǎn)都>=0。
?
5.
枚舉類型:
枚舉類型,指一個(gè)被命名的整型常數(shù)的集合(int型)
把枚舉類型名看做是一個(gè)命名空間,命名空間內(nèi)部的成員變量的使用相當(dāng)于類成員使用規(guī)則
即類定義 ? class A{int a; float b;};
枚舉類型定義: ?enum a{x,y=8,z}; ?
枚舉類型共享存儲(chǔ)空間,即sizeof(a) = 4
第一個(gè)值未賦值,則默認(rèn)為0,后面一個(gè)值未賦值默認(rèn)為前一個(gè)值加1
則上述定義中, ?a::x的值是0 ? a::y的值是8, ? a::z的值是9
?
union數(shù)據(jù)類型:的大小計(jì)算方法是:
union的長(zhǎng)度取決于其中的長(zhǎng)度最大的那個(gè)成員變量的長(zhǎng)度。
即union中成員變量是重疊擺放的,其開(kāi)始地址相同。
其實(shí)union(共用體)的各個(gè)成員是以同一個(gè)地址開(kāi)始存放的,每一個(gè)時(shí)刻只可以存儲(chǔ)一個(gè)成員,這樣就要求它在分配內(nèi)存單元時(shí)候要滿足兩點(diǎn):???
? 1.一般而言,共用體類型實(shí)際占用存儲(chǔ)空間為其最長(zhǎng)的成員所占的存儲(chǔ)空間;???
? 2.若是該最長(zhǎng)的存儲(chǔ)空間對(duì)其他成員的元類型(如果是數(shù)組,取其類型的數(shù)據(jù)長(zhǎng)度,例int?? a[5]為4)不滿足整除關(guān)系,該最大空間自動(dòng)延伸;?
?
結(jié)構(gòu)體:的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍
?
6.
有關(guān)main函數(shù),
void main()
{
?cout<<1<<endl;
main();
}
會(huì)一直輸出1,遞歸調(diào)用直至棧溢出
所以用戶可以調(diào)用main()函數(shù)
?
7.
下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是(B)
A:用一個(gè)對(duì)象去初始化同一個(gè)類的另一個(gè)新對(duì)象時(shí)
B:將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)
C:函數(shù)的形參對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)
D:函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)
解析:
?class Base{};
Base w1;???? //構(gòu)造函數(shù)
Base w2(w1);?? //拷貝構(gòu)造函數(shù)
w1 = w2;???? //賦值運(yùn)算符
Base w3 = w1; //拷貝構(gòu)造函數(shù)?
?
8.
main()
{ ? int ?a[3][2]={0},(*ptr)[2],i,j;
??? for(i=0;i<2;i++)
??? { ? ptr=a+i;
??? ? ? scanf("%d",ptr);
??? ? ? ptr++;//ptr++第三次的時(shí)候無(wú)法進(jìn)行 因?yàn)閜tr是指針數(shù)組 大小只有2
??? }
??? for(i=0;i<3;i++)
??? {
??? ? ? for(j=0;j<2;j++)
??? ? ? ? ?printf("%2d",a[i][j]);
??? ? ? printf("\n");
??? }
}
運(yùn)行時(shí)輸入:1 ?2 ?3<回車(chē)>,則輸出結(jié)果為:
1 0
2 0
0 0
?
9.
注意:
用C程序?qū)崿F(xiàn)的算法可以沒(méi)有輸入但必須要有輸出
?
10.
注意:
如果要實(shí)現(xiàn)一個(gè)多線程(非MFC)程序, 選擇多線程CRT, 創(chuàng)建線程的時(shí)候應(yīng)該用CreateThread還是_beginthreadex()?
選擇:_beginthreadex()
解析:
_beginthreadex()比較于 CreateThread()有更高的線程安全性,不會(huì)造成多個(gè)線程共用同一個(gè)全局變量的情況
?
11.
有關(guān)循環(huán)隊(duì)列
判空:Q.rear==Q.front;
約定為頭指針指向尾指針;
隊(duì)列滿:(Q.rear+1)%MAXQSIZE==Q.front;
尾指針下一個(gè)位置是頭指針;
循環(huán)隊(duì)列插入元素是(rear+1)%MAXQSIZE;
循環(huán)隊(duì)列刪除元素是(front+1)%MAXQSIZE;
front比rear“小”, front=20,rear=15,說(shuō)明隊(duì)列中有效數(shù)據(jù)個(gè)數(shù)是 15 + (m - 20) ?= ?m - 5個(gè)
例:假設(shè)有MAXQSIZE=60(0~59)的一個(gè)數(shù)組,存儲(chǔ)一個(gè)滿循環(huán)隊(duì)列Q
隊(duì)列為空時(shí),初始化Q.front=Q.rear=0
隊(duì)列為滿時(shí):Q.front=0,Q.rear=59
ps:這里我們可以探討為什么要對(duì)MAXQSIZE取余求模,詳如下:
如果不取余:Q.rear+1=59+1=60,數(shù)組中最大下標(biāo)為59而無(wú)60顯然不取余是不對(duì)的
取余后:(Q.rear+1)%MAXQSIZE=(59+1)%60=60%60=0,而Q.front= 0,因此可以構(gòu)成判斷。
?
?
12.
文本加密的方法:
RSA
RC4
DES
?
13.
TCP協(xié)議建立連接的兩方,如果一方突然發(fā)生故障(比如斷電)斷開(kāi)了連接
1.TCP連接不能?自動(dòng)查別 斷連的現(xiàn)象
2.TCP中keepalive機(jī)制是默認(rèn)不打開(kāi)的
打開(kāi)后會(huì)定時(shí)向連接對(duì)方發(fā)送ACK包(linux下默認(rèn)是7200s 即2小時(shí)發(fā)生一次發(fā)送一次握手信息),如果在發(fā)送ACK包后對(duì)方不回應(yīng)才能檢測(cè)道對(duì)方的斷開(kāi)信息
3.可以自己實(shí)現(xiàn)”心跳檢測(cè)”的方法來(lái)確定對(duì)方是不是已經(jīng)斷開(kāi)連接
Heartbeat機(jī)制是客戶端每個(gè)一段時(shí)間向服務(wù)器發(fā)送數(shù)據(jù)包,來(lái)通知服務(wù)端該客戶端保持連接
?
?
?
總結(jié)
以上是生活随笔為你收集整理的7-25日牛客网刷题 未知点、错题 集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 7-24练习 测试
- 下一篇: 7-26复习重载并实现重载部分符号