參考:http://www.cnblogs.com/duchengdong/archive/2012/03/30/2425300.html
1、
main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); }
答案:2、5
分析:*(a+1)即a[1],為2;&a+1不是首地址+1,系統會認為加一個a數組的位移,是位移了一個數組的大小(本例是5個int)
int *ptr=(int *)(&a+1);
則ptr實際是&(a[5]),也就是a+5
2、用預先處理指令#define聲明一個常數,用以表明一年都多少秒(忽略閏年的情況)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
#define的基本文法知識(不能以分號結尾、括弧的使用等)
懂得前置處理器將為你計算常數運算式的值
意識到這個運算式將使一個16位機的整型資料溢出,因此要使用到長整型符號L,告訴編譯器這個常數為長整型數
如果在運算式中用到了UL(表示無符號整型)
3、寫一個標準的宏MIN,這個宏輸入兩個參數並返回較小的一個
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
4、寫一個NSString類的實現
+ (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id) stringWithCString: (const char*)nullTerminatedCString encoding: (NSStringEncoding)encoding { NSString *obj; obj = [self allocWithZone: NSDefaultMallocZone()]; obj = [obj initWithCString: nullTerminatedCString encoding: encoding]; return AUTORELEASE(obj); }
5、obj-c有多重繼承嗎?不是的話有什麼替代方法?
沒有,多繼承在cocoa中使用protocol委託來實現
6、obj-c有私人方法嗎?是有變數呢?
方法只有兩種:靜態方法和執行個體方法,預設為公有。
變數:私人、保護和公有。預設為私人。
@interface Controller : NSObject { NSString *something; } + (void)thisIsAStaticMethod; - (void)thisIsAnInstanceMethod; @end @interface Controller (private) - (void)thisIsAPrivateMethod; @end
可以通過上述方法來實現方法的私人化
7、關鍵字const有什麼含意?修飾類呢?static的作用?用於類呢?還有extern C的作用
const int a; a為一個常整型數
int const a; 同上,a為一個常整型數
const int *a; a為指向常整型數的指標(即整型數不可修改,但是指標可以)
int* const a; a為指向整型數的常指標(即整型數可以修改,但是指標不可修改)
int const *a const; a為一個指向常整數的常指標
(1)函數體內 static 變數的作用範圍為該函數體,不同於 auto 變數,該變數的記憶體只被分配一次,因此其值在下次調用時仍維持上次的值;
(2)在模組內的 static 全域變數可以被模組內所用函數訪問,但不能被模組外其它函數訪問;
(3)在模組內的 static 函數只可被這一模組內的其它函數調用,這個函數的使用範圍被限制在聲明它的模組內;
(4)在類中的 static 成員變數屬於整個類所擁有,對類的所有對象只有一份拷貝;
(5)在類中的 static 成員函數屬於整個類所擁有,這個函數不接收 this 指標,因而只能訪問類的static 成員變數。
(1)被 extern "C"限定的函數或變數是 extern 類型的;
extern 是 C/C++語言中表明函數和全域變數作用範圍(可見度)的關鍵字,該關鍵字告訴編譯器,
其聲明的函數和變數可以在本模組或其它模組中使用。
(2)被 extern "C"修飾的變數和函數是按照 C 語言方式編譯和串連的;
(1)在 C++中引用 C 語言中的函數和變數,在包含 C 語言標頭檔(假設為 cExample.h)時,需進
行下列處理:
extern "C"
{
#include "cExample.h"
}
而在 C 語言的標頭檔中,對其外部函數只能指定為 extern 類型,C 語言中不支援 extern "C"聲明,
在.c 檔案中包含了 extern "C"時會出現編譯語法錯誤。
(2)在 C 中引用 C++語言中的函數和變數時,C++的標頭檔需添加 extern "C",但是在 C 語言中不
能直接引用聲明了 extern "C"的該標頭檔,應該僅將 C 檔案中將 C++中定義的 extern "C"函式宣告為
extern 類型。
8、架構分類
Core Audio
OpenAL
Media Library
AVFoundation
Core Data
SQLite
Core Animation
OpenGL ES
Quartz 2D
Bonjour
WebKit
BSD Sockets
Address Book
Core Location
Map Kit
Store Kit
9、obj-c的優缺點
obj-c優點:
1)Cateogies
2)Posting
3)動態識別
4)指標計算
5)彈性訊息傳遞
6)不是一個過度複雜的C衍生語言
7)obj-c與c++可混合編程
obj-c缺點:
1)不支援命名空間
2)不支援運算子多載
3)不支援多重繼承
4)使用動態運行時類型,所有方法都是函數調用,所以很多編譯時間最佳化方法都用不到。
10、關鍵字volatile有什麼含意?並給出三個不同的例子。
一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確的說就是,最佳化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在寄存器裡的備份。下面是volatile變數的幾個例子:
1、平行裝置的硬體寄存器(如:狀態寄存器)
2、一個中斷服務子程式會訪問到的非自動變數
3、多線程應用中被幾個任務共用的變數
11、簡述堆和棧的區別
棧是編譯器自動管理,堆是程式員控制的。
棧是一塊連續的記憶體地區,是向低地址擴充的資料結構,堆是向高地址擴充的資料結構,是不連續的用鏈表格儲存體的。