面試題嵌入式軟件開發(fā)_第1頁
面試題嵌入式軟件開發(fā)_第2頁
面試題嵌入式軟件開發(fā)_第3頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1. 什么是預編譯,何時需要預編譯:答案:、總是使用不經(jīng)常改動的大型代碼體。(好工程的回答,不是么:) )、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有 包含文件預編譯為一個預編譯頭。2. char * const pchar const * pconst char *p 上述三個有什么區(qū)別?答案:char * const p; /常量指針, const 修飾的是指針 p ,故 p 的值不可以修改char const * p ;/const 修飾的是 *p ,為指向常量的指針, 指向的常量值不可以改 const char *p ; /和 cha

2、r const *p3. 數(shù)組變量和指針的區(qū)別?cpp view plaincopy1.#include <iostream>2.using namespace std;3.4.int main( int argc, char const *argv)5.6.char str1 = "abc" ;7.char str2 = "abc" ;8.const char str3 = "abc" ;9.const char str4 = "abc" ;10.const char *str5 = "ab

3、c" ;11.const char *str6 = "abc" ;12.char *str7 = "abc" ;13.char *str8 = "abc" ;14.15.cout << ( str1 = str2 ) << endl;16.cout << ( str3 = str4 ) << endl;17.cout << ( str5 = str6 ) << endl;18.cout << ( str7 = str8 ) <<

4、endl;19.20.return 0;21.結(jié)果是: 0 0 1 1 str1,str2,str3,str4 是數(shù)組變量,它們有各自的內(nèi)存空間;而 str5,str6,str7,str8 是指針,它們指向相同的常量區(qū)域。4. 以下代碼中的兩個 sizeof 用法有問題嗎?答案是有問題的,只要長度超過指針的長度就不可以了cpp view plaincopy1.#include <iostream>2.using namespacestd;3.4.voidUpperCase(char str )/ 將 str 中的小寫字母轉(zhuǎn)換成大寫字母5.6.for ( size_ti=0; i &

5、lt;sizeof(str)/ sizeof (str0); +i )7.if ( 'a'<=stri && stri <='z' )8.stri -= ('a' -'A');9.10.11.intmain( int argc, char const*argv)12.13.char str ="aBcDeeeee" ;14.cout << "str字符長度為 : "<< sizeof (str)/ sizeof (str0) <<

6、; endl;15.UpperCase( str );16.cout << str << endl;17.return 0;18.答案:str 字符長度為 : 10ABCDEEEEe函數(shù)內(nèi)的 sizeof 有問題。根據(jù)語法, sizeof 如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動態(tài)分配的或外部 數(shù)組大小。函數(shù)外的 str 是一個靜態(tài)定義的數(shù)組,因此其大小為6,因為還有 '0' ,函數(shù)內(nèi)的 str 實際只是一個指向字符串的指針, 沒有任何額外的與數(shù)組相關(guān)的信息, 因此 sizeof 作用于上只將其當指針看, 一個指針為 4 個字節(jié), 因此返回 4 。

7、PS :我的是 64 位的 CPU ,所以指針是 8 位5. 一個 32 位的機器 ,該機器的指針是多少位答案:指針是多少位只要看地址總線的位數(shù)就行了。 80386 以后的機子都是 32 的數(shù)據(jù)總線。所以指針的位數(shù)就是 4 個 字節(jié)了。話說, 64 位機子( CPU&OS )的指針同樣是 32 位的,即 4 個字節(jié),所以指針不是看 CPU 的字長,而 是地址總線的位數(shù)6. 關(guān)于數(shù)組指針cpp view plaincopy1. #include "stdio.h"2. int main( int argc, char const *argv)3. 4. int a5=

8、1,2,3,4,5;5. int *ptr=( int *)(&a+1);6. printf( "%d,%d n" ,*(a+1),*(ptr-1);7. return 0;8. 答案: 2, 5*(a+1 )就是 a1 , *(ptr-1) 就是 a4,執(zhí)行結(jié)果是 2,5。 &a+1 不是首地址 +1 ,系統(tǒng)會認為加一個 a 數(shù)組的偏移, 是偏移了一個數(shù)組的大小(本例是5 個 int ) int *ptr=(int *)(&a+1); 則 ptr 實際是 &(a5), 也就是 a+5 原因如下:&a是數(shù)組指針,其類型為 int (*

9、)5; 而指針加 1要根據(jù)指針類型加上一定的值,不同類型的指針 +1 之后增加的 大小不同 a 是長度為 5 的 int 數(shù)組指針, 所以要加 5*sizeof(int) 所以 ptr 實際是 a5 但是 prt 與 (&a+1) 類型是不 一樣的 (這點很重要 ) 所以 prt-1 只會減去 sizeof(int*) a,&a 的地址是一樣的,但意思不一樣, a 是數(shù)組首地址,也 就是 a0 的地址, &a 是對象(數(shù)組)首地址, a+1 是數(shù)組下一元素的地址,即 a1,&a+1 是下一個對象的地址, 即 a5.7. 請問以下代碼有什么問題:cpp view

10、plaincopy1.#include "stdio.h"2.#include "string.h"3.int main()4.5.char a;6.char *str=&a;7.strcpy(str, "hello" );8.printf(str);9.10.return 0;11.答案:沒有為 str 分配內(nèi)存空間,將會發(fā)生異常問題出在將一個字符串復制進一個字符變量指針所指地址。雖然 可以正確輸出結(jié)果,但因為越界進行內(nèi)在讀寫而導致程序崩潰。即“hello將”會寫入到 &a 以及之后的 5 個(包括NUL ),就是說越界了,可能某個時候就爆發(fā)錯誤了8. char* s="AAA" printf("%s",s); s0='B' printf("%s",s); 有什么錯?答案: "AAA" 是字符串常量。 s 是指針, 指向這個字符串常量, 所以聲明 s 的時候就有問題。 cosnt char* s="AAA" 然后又因為是常量,所以對是s0的賦值操作是不合法的。即不能對常量進行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論