一些面試題 關於指標的一些理解

2021-06-05 14:15:34 字數 1852 閱讀 7698

1、main()

; int *ptr=(int *)(&a+1);  

printf("%d,%d",*(a+1),*(ptr-1)); 

}答:2,5 

*(a+1

)就是a[1],*(ptr-1)就是a[4],執行結果是2,5 

&a+1不是首位址+1,系統會認為加乙個a陣列的偏移,是偏移了乙個陣列的大小(本例是5個int) 

int *ptr=(int *)(&a+1); 

則ptr實際是&(a[5]),也就是a+5 

原因如下: 

&a是陣列指標,其型別為 int (*)[5]; 

而指標加1要根據指標型別加上一定的值,不同型別的指標+1之後增加的大小不同。 

a是長度為5的int陣列指標,所以要加 5*sizeof(int) 

所以ptr實際是a[5] 

但是prt與(&a+1)型別是不一樣的(這點很重要) 

所以prt-1只會減去sizeof(int*) 

a,&a的位址是一樣的,但意思不一樣 

a是陣列首位址,也就是a[0]的位址,&a是物件(陣列)首位址, 

a+1是陣列下一元素的位址,即a[1],&a+1是下乙個物件的位址,即a[5]. 

2、用預處理指令#define宣告乙個常數,用以表明1年中有多少秒(忽略閏年問題)

#define seconds_per_year (60 * 60 * 24 * 365)ul  

我在這想看到幾件事情:  

•#define 語法的基本知識(例如:不能以分號結束,括號的使用,等等)  

•懂得預處理器將為你計算常數表示式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。 

•意識到這個表示式將使乙個16位機的整型數溢位-因此要用到長整型符號l,告訴編譯器這個常數是的長整型數。  

•如果你在你的表示式中用到ul(表示無符號長整型),那麼你有了乙個好的起點。記住,第一印象很重要。 

3、寫乙個"標準"巨集min ,這個巨集輸入兩個引數並返回較小的乙個。 

#define min(a,b) ((a) <= (b) ? (a) : (b))  

這個測試是為下面的目的而設的:   •

標識#define在巨集中應用的基本知識。這是很重要的,因為直到嵌入(inline)操作符變為標準c的一部分,巨集是方便產生嵌入**的唯一方法,對於嵌入式系統來說,為了能達到要求的效能,嵌入**經常是必須的方法。  

•三重條件操作符的知識。這個操作符存在c語言中的原因是它使得編譯器能產生比 if-then-else 

更優化的**,了解這個用法是很重要的。 

•懂得在巨集中小心地把引數用括號括起來   •

我也用這個問題開始討論巨集的***,例如:當你寫下面的**時會發生什麼事?  

least = min(*p++, b);  

結果是: 

((*p++) <= (b) ? (*p++) : (*p++)) 

這個表示式會產生***,指標p會作三次++自增操作。 

4、obj-c

的優缺點

objc

優點: 

1) cateogies 

2) posing 

3) 動態識別 

4) 指標計算 

5)彈性訊息傳遞 

6) 不是乙個過度複雜的 c 衍生語言 

7) objective-c 與 c++ 可混合程式設計 

缺點: 

1) 不支援命名空間 

2)  不支援運算子過載  3

) 不支援多重繼承  4

) 使用動態執行時型別,所有的方法都是函式呼叫,所以很多編譯時優化方法都用不到。(如內聯函式等),效能低劣。 

一些面試題

q 您在什麼情況下會用到虛方法?它與介面有什麼不同?a 當在繼承類中想重寫某一方法時會用到虛方法 虛方法是類的成員函式,介面相當於抽象類.q override與過載有什麼區別?a override 就是覆蓋的意思,覆蓋父類的同名方法,而過載則是通過參數列來呼叫方法.q 值型別與引用型別有什麼區別?a...

一些面試題

1.如何檢視埠8080的程序 netstat anp grep 8080 lsof i 8080 2.在 tmp目錄下建立test.txt檔案,內容為 hello,world 用乙個命令寫出來。echo hello,world tmp test.txt 3.敘述下列服務的預設埠號。ftp 20,21...

一些面試題

1.給你乙個長度為n的鍊錶。n很大,但你不知道n有多大。你的任務是從這n個元素中隨機取出k個元素。你只能遍歷這個鍊錶一次。你的演算法必須保證取出的元素恰好有k個,且它們是完全隨機的 出現概率均等 解 先選中前k個,從第k 1個元素到最後乙個元素為止,以k i i k 1,k 2,n 的概率選中第i個...