日韩欧美另类久久久精品_亚洲大色堂人在线无码_国产三级aⅴ在线播放_在线无码aⅴ精品动漫_国产精品精品国产专区

貢獻一套ios筆試題

  今天中國人才網(wǎng)小編貢獻給大家的是一套ios筆試題,如果你也感興趣,歡迎大家收藏和分享。

  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],*(ptr-1)就是a[4],執(zhí)行結果是2,5

  &a+1不是首地址+1,系統(tǒng)會認為加一個a數(shù)組的偏移,是偏移了一個數(shù)組的大小(本例是5個int)

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

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

  原因如下:

  &a是數(shù)組指針,其類型為 int (*)[5];

  而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同。

  a是長度為5的int數(shù)組指針,所以要加 5*sizeof(int)

  所以ptr實際是a[5]

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

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

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

  a是數(shù)組首地址,也就是a[0]的地址,&a是對象(數(shù)組)首地址,

  a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個對象的地址,即a[5].

  2.以下為Windows NT下的32位C++程序,請計算sizeof的值

  void Func ( char str[100] )

  {

  sizeof( str ) = ?

  }

  void *p = malloc( 100 );

  sizeof ( p ) = ?

  這 題很常見了,Func ( char str[100] )函數(shù)中數(shù)組名作為函數(shù)形參時,在函數(shù)體內,數(shù)組名失去了本身的內涵,僅僅只是一個指針;在失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等 操作,可以被修改。Windows NT 32位平臺下,指針的長度(占用內存的大小)為4字節(jié),故sizeof( str ) 、sizeof ( p ) 都為4。

  3.還是考指針,不過我對cocoa的代碼還是不太熟悉

  大概是這樣的

  - (void)*getNSString(c*****t NSString * inputString)

  {

  inputString = @”This is a main test\n”;

  return ;

  }

  -main(void)

  {

  NSString *a=@”Main”;

  NSString *aString = [NSString stringWithString:@"%@",getNSString(a)];

  NSLog(@”%@\n”, aString);

  }

  最后問輸出的字符串:NULL,output在函數(shù)返回后,內存已經被釋放。

  4.用預處理指令#define聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)

  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

  我在這想看到幾件事情:

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

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

  •; 意識到這個表達式將使一個16位機的整型數(shù)溢出-因此要用到長整型符號L,告訴編譯器這個常數(shù)是的長整型數(shù)。

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

  寫一個“標準“宏MIN

  ,這個宏輸入兩個參數(shù)并返回較小的一個。

  #define MIN(A,B)

  ((A) <= (B) ? (A) : (B))

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

  •;

  標識#define在宏中應用的基本知識。這是很重要的,因為直到嵌入(inline)操作符變?yōu)闃藴蔆的一部分,宏是方便產生嵌入代碼的唯一方

  法,對于嵌入式系統(tǒng)來說,為了能達到要求的性能,嵌入代碼經常是必須的方法。

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

  更優(yōu)化的代碼,了解這個用法是很重要的。

  •; 懂得在宏中小心地把參數(shù)用括號括起來

  •;

  我也用這個問題開始討論宏的副作用,例如:當你寫下面的代碼時會發(fā)生什么事?

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

  結果是:

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

  這個表達式會產生副作用,指針p會作三次++自增操作。

  5.寫一個委托的interface

  @protocol MyDelegate;

  @interface MyClass: NSObject

  {

  id delegate;

  }

  // 委托方法

  @protocol MyDelegate

  - (void)didJobs:(NSArray *)args;

  @end

  6.寫一個NSString類的實現(xiàn)

  + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;

  + (id) stringWithCString: (c*****t char*)nullTerminatedCString

  encoding: (NSStringEncoding)encoding

  {

  NSString *obj;

  obj = [self allocWithZone: NSDefaultMallocZone()];

  obj = [obj initWithCString: nullTerminatedCString encoding: encoding];

  return AUTORELEASE(obj);

  }

  7.obj-c有多重繼承么?不是的話有什么替代方法?

  cocoa 中所有的類都是NSObject 的子類

  多繼承在這里是用protocol 委托代理 來實現(xiàn)的

  你不用去考慮繁瑣的多繼承 ,虛基類的概念.

  ood的多態(tài)特性 在 obj-c 中通過委托來實現(xiàn).

  要注意的是Objective-c只支持單繼承,如果要實現(xiàn)多繼承的話,可以通過類別和協(xié)議的方式來實現(xiàn)。

  8.obj-c有私有方法么?私有變量呢

  objective-c – 類里面的方法只有兩種, 靜態(tài)方法和實例方法. 這似乎就不是完整的面向對象了,按照OO的原則就是一個對象只暴露有用的東西. 如果沒有了私有方法的話, 對于一些小范圍的代碼重用就不那么順手了. 在類里面聲名一個私有方法

  @interface Controller : NSObject { NSString *something; }

  + (void)thisIsAStaticMethod;

  - (void)thisIsAnInstanceMethod;

  @end

  @interface Controller (private) -

  (void)thisIsAPrivateMethod;

  @end

  @private可以用來修飾私有變量

  在Objective‐C中,所有實例變量默認都是私有的,所有實例方法默認都是公有的

  9.關鍵字c*****t有什么含意?修飾類呢?static的作用,用于類呢?還有extern c的作用

  c*****t意味著”只讀”,下面的聲明都是什么意思?

  c*****t int a;

  int c*****t a;

  c*****t int *a;

  int * c*****t a;

  int c*****t * a c*****t;

  前 兩個的作用是一樣,a是一個常整型數(shù)。第三個意味著a是一個指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個意思a是一個指向整型 數(shù)的常指針(也就是說,指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數(shù)的常指針(也就是說,指針指向的整型數(shù) 是不可修改的,同時指針也是不可修改的)。

  結論:

  •; 關鍵字c*****t的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數(shù)為常量是為了告訴了用戶這個參數(shù)的應用目的。如果

  你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用c*****t的程序員很少會留下的垃圾讓別人來清

  理的。)

  •; 通過給優(yōu)化器一些附加的信息,使用關鍵字c*****t也許能產生更緊湊的代碼。

  •; 合理地使用關鍵字c*****t可以使編譯器很自然地保護那些不希望被改變的參數(shù),防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現(xiàn)。

  (1)欲阻止一個變量被改變,可以使用 c*****t 關鍵字。在定義該 c*****t 變量時,通常需要對它進行初

  始化,因為以后就沒有機會再去改變它了;

  (2)對指針來說,可以指定指針本身為 c*****t,也可以指定指針所指的數(shù)據(jù)為 c*****t,或二者同時指

  定為 c*****t;

  (3)在一個函數(shù)聲明中,c*****t 可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內部不能改變其值;

  (4)對于類的成員函數(shù),若指定其為 c*****t 類型,則表明其是一個常函數(shù),不能修改類的成員變量;

  (5)對于類的成員函數(shù),有時候必須指定其返回值為 c*****t 類型,以使得其返回值不為“左值”。

  關鍵字volatile有什么含意?并給出三個不同的例子。

  一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到

  這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:

  •; 并行設備的硬件寄存器(如:狀態(tài)寄存器)

  •; 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)

  •; 多線程應用中被幾個任務共享的變量

  •; 一個參數(shù)既可以是c*****t還可以是volatile嗎?解釋為什么。

  •; 一個指針可以是volatile 嗎?解釋為什么。

  下面是答案:

本文已影響6827
上一篇:創(chuàng)聯(lián)軟件熱門筆試題 下一篇:網(wǎng)頁設計師筆試題

相關文章推薦

|||||