7.30
1.
int *p1 = new int[10]; // 10個未初始化int
int *p2 = new int[10](); // 10個值初始化為0的int
解析:在《C和指針》這本書里有介紹,int *p1=new int[10];該語句給指針p1分配內存,沒有對指針初始化, int *p2=new int[10]();該語句給指針p2分配內存,并初始化指針2.分解質因數
void prim(int m, int n){if (m >= n){while ( 1 ) n++;( 2 );prim(m, n);cout << n << endl;}}
解析:分解質因數是將一個數差分成為幾個質數相乘。
n從2開始
第一處為m%n,代表取余。當余數是0的時候表示除盡,跳出while循環,即找出一個質因數。此時一個質因數即為n
然后 m/=n 即讓m除去這個質因數,然后再進入求新m質因數的遞歸。
答案:m%n m/=n3.
enum string{ x1, x2, x3=10, x4, x5,
} x;
函數外部訪問x等于什么? 解析:
如果是函數外定義那么是0
如果是函數內定義,那么是隨機值,因為沒有初始化
在全局域定義enum,輸出x是0,但是在局部域定義enum,輸出x是隨機數
答案:04.
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
請問:
p1+5= 什么?
p2+5= 什么?解析:指針+n = 指針 + n*sizeof(類型);
p1+5=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ 5=轉換成16進制=0x801005
p2+5=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=轉換成16進制=0x810014 5.設已經有A,B,C,D4個類的定義,程序中A,B,C,D析構函數調用順序為?
C c;
void main()
{A*pa=new A();B b;static D d;delete pa;
}
答:
對類A, 是建立在堆上的對象指針pa, 手動釋放
對類B, 是建立在棧上的對象b,main函數結束就釋放
對類C ,在靜態存儲區創建了一個對象c ,程序結束時候釋放
對類D,也是在靜態存儲區建立對象d,但是局部變量,程序結束時候釋放. 析構函數調用順序:
先調用A的析構,因為delete pa . A
再釋放棧上的對象b, B
關鍵看CD的順序.
c是全局對象,對它的初始化是在main函數之前,所以析構時候要放在最后.
也就是先析構d ,然后再析構c
總結
- 上一篇: 海康摄像头
- 下一篇: 1.我和python的第一次亲密接触