亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C以及Objective-C測試題講解(上)

2019-11-14 18:31:11
字體:
來源:轉載
供稿:網友

測試地址:http://www.eosgarden.com/en/articles/objc-quizz/take/

這是前幾天好友共享的Obj-C測試題,共57題。自以為精通OC了的本人去做了下測試題,結果受到了較為嚴重的精神打擊,考點非常細,有些甚至非常底層。準備分2次講解這些題目,下面逐個講解這些考題。其中有一些題目筆者自身也有一些疑問,歡迎探討。

1.What is "Nil" in Objective-C? “Nil”在OC中是什么?

答案:(void *)0

說明:'NULL','nil'以及'Nil'是指向0地址的空指針。'nil'和'Nil'在OC中被定義為"DARWIN_NULL",也就是(void *)0

 

2.What will happen when the following PRogram is executed?以下代碼運行后會怎樣?

 

  1. #include <stdlib.h>  
  2. int main( void )  
  3. {  
  4.     char * ptr = NULL;  
  5.     free( ptr );  
  6.     return 0;  
  7. }  


答案:不會產生任何問題。

 

說明:C標準庫定義free()空指針是安全的。

 

3.What method is called by the NSLog function when the "%@" sequence is present?調用NSLog方法時"%@"會調用什么方法?

答案:description

說明:OC基礎

 

4.Which is the correct syntax  to declare a function pointer name "foo" returning an integer and having an integer as argument?

聲明一個名為“foo”的函數指針,該函數返回一個整型,并接受一個整型參數

答案:int(* foo)(int)

說明:基礎的函數指針問題

 

5.How many bytes are used to store a "long long" data type?long long類型占幾個字節?

答案:Implementation defined 根據(編譯器的)實現而定義

說明:這個問題筆者當時回答錯了,筆者選了8個字節,雖然大多數編譯器上long long的確是8個字節,但是這種說法是很值得商榷的。而實際上C標準中并沒有具體給出規定那個基本類型應該是多少字節數,而且這個也與機器、OS、編譯器有關。

 

6.What is the difference between the "unsigned int" and the "NSUInteger" data types?"unsigned int"和"NSInteger"的區別?

答案:It depends on the processor.取決于處理器

說明:基礎題,看過NSUInteger的定義就應該知道,32位和64位的定義有區別。定義如下:

  1. #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64  
  2. typedef long NSInteger;  
  3. typedef unsigned long NSUInteger;  
  4. #else  
  5. typedef int NSInteger;  
  6. typedef unsigned int NSUInteger;  
  7. #endif  

 

 

7.What will be printed by the following program?以下程序的輸出結果?

 

  1. #include <stdio.h>  
  2. typedef union  
  3. {  
  4.     short s;  
  5.     char  c;  
  6. }  
  7. sc;  
  8. int main( void )  
  9. {  
  10.     sc u;  
  11.     u.s = 0x602;  
  12.     printf( "%d/n", u.c );  
  13.     return 0;  
  14. }  

答案:Machine dependant.根據機器不同結果不同。

 

說明:涉及大小端問題,而且參照第5題的話short的字節長度也是不定的。

8.What can you assume when calling the "stringWithString:" method on a "NSString" object?

使用NSString的stringWithString時我們可以得知:

答案:The returned object is auto-released. 返回的NSString對象是auto-released(自釋放的)。

說明:基礎

 

9.Is it possible to have multiple instances of the "NSAutoreleasePool" class in the same program?

是否可以在一個程序中使用多個NSAutoreleasePool?

答案:顯然可以。

說明:多線程編程的時候特別有用。

 

10.Which line of the following code will be reported as an error by the compiler?

下面哪一行代碼編譯器會報錯?

 

  1. int main( void )  
  2. {  
  3.     const char * s = "Hello world!";      /* Line 3 */  
  4.     s              = "Hello universe!";   /* Line 4 */  
  5.     s[ 0 ]         = 'A';                 /* Line 5 */  
  6.     return 0;  
  7. }  

答案:第五行

 

說明:可能有人不知道const char *類型的意義。從右往左讀,將*讀作pointer to,也就是a pointer to const char,指向const char的指針,所以指針可變,指向的char不可變。

 

11.Which is true about the following statement, placed outside of any function or method?

對于放在任何方法以外的以下聲明,正確的說法是?

 

  1. static int foo;  

答案:The variable cannot be accessed directly from other files. The variable has a default initial value 0.變量不能直接從其他文件直接訪問,變量默認值為0。

 

說明:這題的標準答案如上,但本人對答案持質疑態度。不能從別的文件直接訪問這種說法欠妥,將其聲明在頭文件中,只要導入該頭文件,就可以訪問。

 

12.Is garbage collection available on iPhone OS?

iOS有垃圾回收機制嗎?

答案:沒有

說明:基礎。但要注意,Mac OS是有垃圾回收機制的。

 

13.What can you say about the memory addresses that will be printed by the following program?

對于以下代碼打印出的內存地址,你怎么看?

 

  1. #import <Cocoa/Cocoa.h>  
  2. int main( void )  
  3. {  
  4.     NSAutoreleasePool * pool;  
  5.     NSString          * s1;  
  6.     NSString          * s2;  
  7.     NSString          * s3;  
  8.     NSString          * s4;  
  9.     pool = [ [ NSAutoreleasePool alloc ] init ];  
  10.     s1   = @"Hello world!";  
  11.     s2   = @"Hello world!";  
  12.     s3   = [ NSString stringWithString: @"Hello world!" ];  
  13.     s4   = [ [ NSString alloc ] initWithString: @"Hello world!" ];  
  14.     printf( "%p/n%p/n%p/n%p/n", s1, s2, s3, s4 );  
  15.     [ s4 release ];  
  16.     [ pool release ];  
  17.     return 0;  
  18. }  

答案:All addresses will be the same. 所有地址相同
說明:不可變字符串,編譯器自動優化的結果。

 

 

14.Which line can be used to compile an Objective-C executable named "test" from a "test.m" file?

下面哪一條命令可將test.m編譯為可執行文件?

答案:gcc -Wall -framework Cocoa -o test test.m

說明:這題不太清楚,因為平時不太會去手動編譯吧,不過湊巧蒙對了。

 

15.Does the Objective-C compiler treats the identifiers of an enumeration as integer constants?

OC的編譯器將枚舉型當作整型來處理么?

答案:顯然是的

說明:基礎

 

16.What will be printed by the following program?下面程序的輸出結果?

 

  1. #include <stdio.h>  
  2. int main( void )  
  3. {  
  4.     unsigned int array[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };  
  5.     unsigned int i               = 0;  
  6.     unsigned int sum             = 0;  
  7.     int x                        = 0;  
  8.     int y                        = 0;  
  9.     for( i = 0; i < 4; ++i )  
  10.     {  
  11.         x    = i % 2;  
  12.         y    = ( x ) ? 0 : 1;  
  13.         sum += array[ x ][ y ];  
  14.     }  
  15.     printf( "%d/n", sum );  
  16.     return 0;  
  17. }  

答案:6

 

說明:基礎

 

17.What happen when a floating point value is assigned to an integer variable?

當一個浮點型數據賦值給整型變量時會發生?

答案:取整,浮點型縮短

說明:基礎

18.In theory, is it safe to call a function of the standard C library from a signal handler?

理論上,在信號處理函數中調用標準庫函數是安全的嗎?

答案:不安全

說明:Functions from the C Standard Library may not be reentrant.

由于標準庫函數中可能用到靜態或全局變量(可能被主過程和信號處理函數同時操作),這種情況屬于不可重入函數,所以在信號處理函數中調用標準庫函數是不安全的。具體參考APUE中相關章節。

PS:這題要感謝Unix大牛 @delo 在微博中的解答,太專業了。Unix相關知識咱還是有所欠缺委屈。

 

19.What will be printed by the following program?

以下程序的輸出結果是?

 

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3. int main( void )  
  4. {  
  5.     int * ptr;  
  6.     int i;  
  7.     ptr = ( int * )malloc( 4 * sizeof( int ) );  
  8.     for( i = 0; i < 4; i++ )  
  9.     {  
  10.         ptr[ i ] = i;  
  11.     }  
  12.     printf( "%d, ", *ptr++ );  
  13.     printf( "%d, ", ++( *ptr ) );  
  14.     printf( "%d, ", *++ptr );  
  15.     printf( "%d/n", ++*ptr );  
  16.     return 0;  
  17. }  

答案:0,2,2,3

 

說明:1:打印ptr[0],指針右移;2:ptr[1]自增,打印ptr[1];3:指針右移,打印ptr[2];4:ptr[2]自增,打印ptr[2]

20. Is it possible to use dynamic libraries when developing for iPhone OS?

iOS開發中可以使用動態鏈接庫嗎?

答案:不能

說明:iOS開發只能使用靜態庫

 

21.Which of the following creates a class that conforms to a protocol?

如何繼承協議?

答案:@interface ClassName < ProtocolName >

說明:基礎

 

22.What is the default visibility for instance variables?

實例變量的默認訪問權限是?

答案:@protected

說明:和其他語言類似,雖然在iOS中也許不常用。

 

23.Is it possible to use C++ when developing for iPhone OS?

iOS開發中可以使用C++嗎?

答案:可以

說明:.mm文件可進行混編,cocos2D帶的Box2D物理引擎就是常見的C++編寫。

 

24.What can you say about the code below?元方,你怎么看?

 

  1. - (void)foo: (NSString *)s  
  2. {  
  3.     s = @"Hello world!";  
  4. }  

答案:大人,此代碼完全沒有問題

 

說明:雖然代碼可以運行,但要當心,該方法并不能改變外部傳入的字符串的值,形參和實參的關系。

 

25.Consider the following code:

 

  1. double x = 5 / 10 - 2 / 2 * 4;  

Please write the value of x below:

 

答案:-4

說明:超級基礎,注意整除

 

26.After the execution of the following code, what is the retain count of the "s1" and "s2" objects?

執行以下代碼后,s1與s2的引用計數是多少?

 

  1. NSMutableString * s1;  
  2. NSMutableString * s2;  
  3. s1 = [[[NSMutableString alloc] initWithString:@"Hello world!"] autorelease];  
  4. [[[[s1 retain] retain] retain] release];  
  5. s2 = [s1 copy];  
  6. [s1 release];  

答案:s1:2,s2:1

 

說明:s1:alloc+1,retain三次+3,release兩次-2,引用計數為2;s2:copy將產生新的對象,+1,引用計數1。

27.What can you say about the code below?元方,你怎么看?

  1. [Foo bar: 1];  
  2. [Foo bar: 1 y: 2];  

答案:調用了不同的方法。

 

說明:OC中冒號前的部分視為方法名的一部分,比如第一個方法名為bar:,第二個方法名為bar: y:,完全不同的兩個方法,不是重載。

 

28.Is it true that the "initialize" message is sent to a class before any other messages, even class methods calls?

"initialize"(初始化)消息是不是首先被發送到類的消息,甚至比調用類方法更早?

答案:是的

說明:這題其實筆者當時其實不太確定,查閱了相關的官方文檔,官方文檔對NSObject的類方法initialize有如下說明:

 

initialize

 

Initializes the receiver before it’s used (before it receives its first message).

+ (void)initialize
Discussion

The runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the program. (Thus the method may never be invoked if the class is not used.) The runtime sends the initialize message to classes in a thread-safe manner. Superclasses receive this message before their subclasses.

大意:運行時只發送一次“initailize”到每個類或其繼承類,是程序內第一個被發送的消息。(因此如果類沒有被使用,則“initialize”不會被調用。)運行時以一個線程安全的方式發送“initailize”消息給類。父類在子類之前接收到該消息。

 

 29.Is there a difference between these two statements?

以下2段聲明語句是否不同?

 

  1. const char * foo;  
  2. char * const bar;  

 

答案:是的,意義不同

說明:參考第10題的方法,第一句讀作a pointer to const char,第二句讀作a const pointer to char,一個是指向字符常量的指針變量,一個是指向字符變量的指針常量,意義完全不同。

 

30.In theory, which function is faster: "strcpy" or "memcpy"?

理論上,“strcpy”和“memcpy”方法哪個效率更高?

答案:memcpy

說明:strcpy比memcpy多一個搜尋字符串結尾符“/0”的操作,比memcpy慢。

原文鏈接:http://blog.csdn.net/xiemotongye/article/details/8915039


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇门遁甲1982国语版免费观看高清| 中文字幕视频一区二区在线有码| 色阁综合伊人av| 国产91精品最新在线播放| 国产精品色午夜在线观看| 中文字幕无线精品亚洲乱码一区| 日韩精品视频在线免费观看| 国产欧美精品一区二区| 不卡在线观看电视剧完整版| 国产精品美女无圣光视频| 成人www视频在线观看| 欧美午夜视频一区二区| 久久久久久久国产精品视频| 精品中文字幕乱| 久久久久久久久久av| 亚洲丝袜av一区| 亚洲一区二区福利| 高跟丝袜欧美一区| 日本最新高清不卡中文字幕| 综合国产在线视频| 午夜美女久久久久爽久久| 久久男人的天堂| 亚洲精品美女在线观看播放| 最近中文字幕2019免费| 97在线视频免费观看| 日韩欧美综合在线视频| 91理论片午午论夜理片久久| 成人在线小视频| 欧美xxxx做受欧美| 精品国产乱码久久久久久婷婷| 国产精品老女人精品视频| 伦伦影院午夜日韩欧美限制| 日韩av在线最新| 久久亚洲精品视频| 欧美精品久久久久久久| 精品久久久视频| 欧美亚州一区二区三区| 欧美与黑人午夜性猛交久久久| 97人洗澡人人免费公开视频碰碰碰| 国产在线精品成人一区二区三区| 中文字幕欧美亚洲| 国产亚洲一区精品| 欧美在线欧美在线| 亚洲精品久久久久国产| 97国产真实伦对白精彩视频8| 国产精品视频久久| 人人澡人人澡人人看欧美| 欧美精品18videos性欧美| 97欧美精品一区二区三区| 国产一区深夜福利| 亚洲性xxxx| 一区二区欧美日韩视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲成人久久一区| 亚洲视频国产视频| 久久青草精品视频免费观看| 亚洲999一在线观看www| 92国产精品久久久久首页| 欧美孕妇孕交黑巨大网站| 中文字幕在线看视频国产欧美| 久久久久久久网站| 欧美亚洲国产精品| 久久久久亚洲精品| 在线视频中文亚洲| 欧美夜福利tv在线| 夜夜嗨av一区二区三区免费区| 久久视频在线看| 57pao国产成人免费| 自拍偷拍免费精品| 中文字幕v亚洲ⅴv天堂| 黄网动漫久久久| 韩日精品中文字幕| 精品色蜜蜜精品视频在线观看| 欧美日韩国产精品| 狠狠色香婷婷久久亚洲精品| 午夜精品一区二区三区在线播放| 国产成人精品在线播放| 国产丝袜一区视频在线观看| 日韩精品欧美国产精品忘忧草| 国产精品久久久久久久久久久不卡| 久久久久久久电影一区| 国产成人精品久久二区二区91| 久久91亚洲精品中文字幕奶水| 亚洲级视频在线观看免费1级| 久久久精品美女| 亚洲激情在线观看视频免费| 亚洲欧美综合区自拍另类| 国产午夜精品一区理论片飘花| 国产日韩欧美视频在线| 欧美日韩在线观看视频| 亚洲xxxx做受欧美| 日本国产精品视频| 色系列之999| 亚洲国产第一页| 国产在线观看精品| 亚洲日本aⅴ片在线观看香蕉| 欧美性69xxxx肥| 北条麻妃一区二区三区中文字幕| 国产欧美精品xxxx另类| 国产成人av在线播放| 欧美日韩国产黄| 伊人久久大香线蕉av一区二区| 亚洲va国产va天堂va久久| 97碰碰碰免费色视频| 日韩高清免费观看| 中文字幕亚洲欧美日韩高清| 色久欧美在线视频观看| 黑人巨大精品欧美一区二区三区| 国产午夜精品美女视频明星a级| 91免费在线视频| 国产精品人成电影在线观看| 精品国产一区二区三区四区在线观看| 国产成人97精品免费看片| 国产欧美va欧美va香蕉在| 久久久www成人免费精品| 97视频在线观看免费高清完整版在线观看| 午夜精品久久久久久久久久久久久| 欧美日韩一区二区精品| 亚洲精品wwwww| 亚洲乱码国产乱码精品精| 精品久久久久久国产| 97香蕉超级碰碰久久免费软件| 亚洲欧美制服丝袜| 色诱女教师一区二区三区| 黑人巨大精品欧美一区二区一视频| 久久青草精品视频免费观看| 日韩av在线免费观看| 亚洲人a成www在线影院| 久久影院在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 2018日韩中文字幕| 国产亚洲精品久久| 中文字幕av一区二区三区谷原希美| 久久国产精品久久久久| 亚洲天堂网站在线观看视频| 久久久噜噜噜久噜久久| 亚洲视屏在线播放| 国产精品成人在线| 日韩av在线网页| 日韩av第一页| 久久精品成人欧美大片| 日韩av免费在线看| 久久影视免费观看| 欧美中文在线字幕| 久久久久久欧美| 久久亚洲国产成人| 亚洲国产精久久久久久久| 日韩亚洲欧美中文高清在线| 亚洲大胆美女视频| 97视频在线看| 亚洲激情自拍图| www.美女亚洲精品| 免费成人高清视频| 高清在线视频日韩欧美| 一区二区欧美亚洲| 国产精品极品美女在线观看免费| 国产精品高潮呻吟久久av无限| 日韩在线国产精品| 2018国产精品视频| 亚洲激情第一页| 亚洲日本欧美中文幕| 国内精品久久久久| 久久国产精品久久久久久久久久| 欧美在线播放视频|