要檢查陣列頭尾會不會出錯
要檢查沒有輸入、非法輸入、是不是沒有對應回傳
.
My C++ Practices
寫程式過程的紀錄
Tuesday, March 13, 2012
Friday, March 9, 2012
Wednesday, March 7, 2012
位置轉換 printf("%f",5);的問題
#inlcude
int main()
{
printf("%f",5);
printf("%d",5.01);
}
首先參數5為int型別,32位元平臺中為4位元組,因此在stack中分配4位元組的記憶
體,用於存放參數5。
然後printf根據說明符"%f",認為參數應該是個double型別(在printf函式中,float會自
動轉換成double),因此從stack中讀了8個位元組。
很顯然,記憶體存取越界,會發生什麼情況不可預料。如果在printf或者scanf中指定了"%f"
,那麼在後面的參數列表中也應該指定一個浮點數,或者一個指向浮點變數的指標,否則不應載
入支援浮點數的函式。
於是("%f",5)有問題,而("%f",5.0)則可行。
答案:
第一個答案是0.000000
第二個答案是一個大數
.
int main()
{
printf("%f",5);
printf("%d",5.01);
}
首先參數5為int型別,32位元平臺中為4位元組,因此在stack中分配4位元組的記憶
體,用於存放參數5。
然後printf根據說明符"%f",認為參數應該是個double型別(在printf函式中,float會自
動轉換成double),因此從stack中讀了8個位元組。
很顯然,記憶體存取越界,會發生什麼情況不可預料。如果在printf或者scanf中指定了"%f"
,那麼在後面的參數列表中也應該指定一個浮點數,或者一個指向浮點變數的指標,否則不應載
入支援浮點數的函式。
於是("%f",5)有問題,而("%f",5.0)則可行。
答案:
第一個答案是0.000000
第二個答案是一個大數
.
Monday, March 5, 2012
HTC面試考古題
(資料整理自ptt tech_job版)
C:指標的觀念, 如單, 雙指標, int指標 與char指標轉換後的位址處理, 字元字串,一維陣列,二維陣列的運用和宣告方式(int *p,char *p,*p++,(*p)++),傳值和傳址,轉型,static,#define,#ifdef,#ifndef
C++: 物件導向的觀念(建構、解構、繼承、多型...等), 建構 解構順序, static, const, extern, virtual function,繼承,動態配置變數, 陣列, public, private, 轉型, reference type, auto_ptr, 繼承時候的建構解構順序, 變數的可視範圍(scope)
JAVA :
JAVA就更偏物件導向了,雖然還是有一些指標和字串,主要有考
Thread,Runnable,public,private,protected,繼承,函式的多型,virtual,
try and catch and finally的使用,身為Java苦手,大概爆掉了QQ
智力測驗數列: 不是mod就是差或是交叉的差
考完後有面試, 會被問到跟OS, 行程, 線程, 記憶體管理出狀況時, 如何了解問題並判斷原因跟解法.
1.填充題,利用跳脫字元印出含有 " " 以及 \ 的符號
2.填充題,輸入任意三個整數,最後可以輸出最小的那個
int Min(int a,int b, int c)
{
(a<=b && a<=c) ? return a : ________________
}
應該是這樣@@ ,總之似乎要考懂得 ? : 的用法
3.計算題,continue的用法
給你一段迴圈,裡面有包含continue、if的敘述,問你最後執行結果是啥
ex: for i=0;i<=15;i++
if i<=4 && i>=6 continue
if i>=10 printf("XXX")
類似這種的
4.計算題,給你兩個.h檔 a.h b.h
a.h會用到 b.h的參數
b.h會用到 a.h的參數
要如何修改程式碼使得編譯器不會產生錯誤
有給提示:用ifndef
5.計算題,考#define位置的觀念
#define xxx yyy
函數A
函數B
與
函數A
#define xxx yyy
函數B
兩種情況時,A B輸出的結果會不會有差別?
6.填充題,指標與雙重指標觀念
且定義 int* p ;
int** pp;
考你類似 *p+1=? **p+2=?
(這部分有點忘了~不確定題目是不是這樣@@)
7.填空題,定義函數
給你一段程式碼,要你定義一個函數以符合最後結果
這題好像有用到C++的語法~看不太懂@@"
所以就直接跳過了
8.計算題,無窮遞迴觀念
void Res(void)
{
printf("start\n");
Res();
printf("End\n");
}
有兩小題吧
a.問你這個函數會不會一直跑下去不會停止? 為什麼?
b.最後會不會印出 End?
(會 stack overflow;不會)
9.計算題,考變數生命週期的觀念
給你一段程式碼
問你local.global.static變數最後的值會是多少?
void Res(void)
給你一個陣列Arr[3]={100,200,300};
10.問答題,指標變數的錯誤?
給你一段程式碼,其中有包含迴圈以及指標變數 char*
程式碼compile會過,但最後結果並不是原本想要的那樣
問你原因出在哪? 並修改之
(注意char* a=""是const char* ,不能改)
11.忘了
12.計算題,寫一個函數,如何不用遞迴的方式寫出費伯納西數列(Fibonacci)?
ex: Fib(7)=13,且不能用遞迴
.
C:指標的觀念, 如單, 雙指標, int指標 與char指標轉換後的位址處理, 字元字串,一維陣列,二維陣列的運用和宣告方式(int *p,char *p,*p++,(*p)++),傳值和傳址,轉型,static,#define,#ifdef,#ifndef
C++: 物件導向的觀念(建構、解構、繼承、多型...等), 建構 解構順序, static, const, extern, virtual function,繼承,動態配置變數, 陣列, public, private, 轉型, reference type, auto_ptr, 繼承時候的建構解構順序, 變數的可視範圍(scope)
JAVA :
JAVA就更偏物件導向了,雖然還是有一些指標和字串,主要有考
Thread,Runnable,public,private,protected,繼承,函式的多型,virtual,
try and catch and finally的使用,身為Java苦手,大概爆掉了QQ
智力測驗數列: 不是mod就是差或是交叉的差
考完後有面試, 會被問到跟OS, 行程, 線程, 記憶體管理出狀況時, 如何了解問題並判斷原因跟解法.
1.填充題,利用跳脫字元印出含有 " " 以及 \ 的符號
2.填充題,輸入任意三個整數,最後可以輸出最小的那個
int Min(int a,int b, int c)
{
(a<=b && a<=c) ? return a : ________________
}
應該是這樣@@ ,總之似乎要考懂得 ? : 的用法
3.計算題,continue的用法
給你一段迴圈,裡面有包含continue、if的敘述,問你最後執行結果是啥
ex: for i=0;i<=15;i++
if i<=4 && i>=6 continue
if i>=10 printf("XXX")
類似這種的
4.計算題,給你兩個.h檔 a.h b.h
a.h會用到 b.h的參數
b.h會用到 a.h的參數
要如何修改程式碼使得編譯器不會產生錯誤
有給提示:用ifndef
5.計算題,考#define位置的觀念
#define xxx yyy
函數A
函數B
與
函數A
#define xxx yyy
函數B
兩種情況時,A B輸出的結果會不會有差別?
6.填充題,指標與雙重指標觀念
且定義 int* p ;
int** pp;
考你類似 *p+1=? **p+2=?
(這部分有點忘了~不確定題目是不是這樣@@)
7.填空題,定義函數
給你一段程式碼,要你定義一個函數以符合最後結果
這題好像有用到C++的語法~看不太懂@@"
所以就直接跳過了
8.計算題,無窮遞迴觀念
void Res(void)
{
printf("start\n");
Res();
printf("End\n");
}
有兩小題吧
a.問你這個函數會不會一直跑下去不會停止? 為什麼?
b.最後會不會印出 End?
(會 stack overflow;不會)
9.計算題,考變數生命週期的觀念
給你一段程式碼
問你local.global.static變數最後的值會是多少?
void Res(void)
給你一個陣列Arr[3]={100,200,300};
10.問答題,指標變數的錯誤?
給你一段程式碼,其中有包含迴圈以及指標變數 char*
程式碼compile會過,但最後結果並不是原本想要的那樣
問你原因出在哪? 並修改之
(注意char* a=""是const char* ,不能改)
11.忘了
12.計算題,寫一個函數,如何不用遞迴的方式寫出費伯納西數列(Fibonacci)?
ex: Fib(7)=13,且不能用遞迴
.
Subscribe to:
Posts (Atom)