C 指標面試題詳解

2021-09-24 05:33:09 字數 2535 閱讀 2103

如果編寫乙個標準strcpy函式的總分值為10,下面給出幾個不同得分的答案: 

直接寫邏輯2分

void strcpy( char *strdest, char *strsrc )

使用const關鍵字限制strsrc加2分 

void strcpy( char *strdest, const char *strsrc ) 

//將源字串加const,表明其為輸入引數,加2分

對字串指標加入非空判斷 

void strcpy(char *strdest, const char *strsrc) 

將原位址返回

char * strcpy( char *strdest, const char *strsrc ) 

執行以上strcpy函式後, strdest的指標會不會還指向字串末尾,不會!strdest是形式引數

檢查下面**有什麼問題?

void getmemory( char *p )

void test( void )

以上**str並不能申請到空間。

傳入中getmemory( char *p )函式的形參為字串指標,在函式內部修改形參並不能真正的改變傳入形參的實參值,執行完 

char*str = null;

getmemory( str );

後的str仍然為null;

1:傳入形參並不能真正改變形參的值,執行完之後為空;

2:在函式getmemory中和test中沒有malloc對應的free,造成記憶體洩露

下面**會出現什麼問題?

char *getmemory( void )

void test( void )

p的作用域在棧空間中,p會被自動釋放,這樣str找不到p,必須在函式用malloc在堆空間中申請記憶體。

下面**會出現什麼問題?

void test( void )

需要加一句str=null, 防止野指標的出現。

看看下面的一段程式有什麼錯誤?

swap( int* p1,int* p2 )

顯然前面,需要加入void關鍵字, p是乙個野指標,這裡不需要用指標p,只需要用乙個臨時變數p

void swap( int* p1,int* p2 )

void func ( char str[100] )

void *p = malloc( 100 );

sizeof ( p ) = ?

函式中sizeof(str)=4

p就是乙個指標,所以p=4

編寫乙個函式,作用是把乙個char組成的字串迴圈右移n個。比如原來是「abcdefghi」如果n=2,移位後應該是「hiabcdefg」 函式頭是這樣的: 

//pstr是指向以'\0'結尾的字串的指標 

//steps是要求移動的n 

如果借助輔助空間,可以在o(n)的時間完成,先將後面n個字元拷貝到temp中,再將前面字元拷貝到後面位置,再將temp拷貝到前面位置。

void loopmove(char *str, int steps)

或者:

void loopmove(char *str, int steps)

可以用o(n^2)的演算法一位一位的將後面的字串移動到前面去,存在一種o(n)的演算法是反轉三次

第一次整個字串反轉,第二次前面steps個字串反轉,第三次後面steps個字串反轉

class solution 

};

編寫類string的建構函式、析構函式和賦值函式,已知類string的原型為:

class string

;

//普通建構函式

string::string(const char *str)

else }

// string的析構函式

string::~string(void)

//拷貝建構函式

string::string(const string &other)    // 得分點:輸入引數為const型

//賦值函式

string & string::operator =(const string &other) // 得分點:輸入引數為const型

賦值函式需要釋放掉原來的空間,重新建立空間開始深拷貝,這是要防止自賦值的情況,拷貝構造不用乾掉自己,因為拷貝構造也是構造,無中生有

面試題 指標

一 指標 1 利用指標實現兩數交換 include using namespace std void swap1 int p,int q void swap2 int p,int q void swap3 int p,int q void swap4 int p,int q void swap5 i...

面試題總結 C 語言 指標

面試題總結 c 語言 指標 1.嵌入式系統經常具有要求程式設計師去訪問某特定的記憶體位置的特點。在某工程中,要求設定一據對位址為0x67a9的整形變數的值為0xaa66,編譯器是乙個純粹的ansi編譯器寫帶碼去完成這一任務。注釋 這一問題測試你是否知道為了訪問乙個絕對位址,把乙個整形數強制轉換 yp...

c語言指標相關面試題

例1 int main int ptr int a 1 printf d d n a 1 ptr 1 system pause return 0 程式結果 2 5 分析 陣列名在sizeof內部單獨出現和 陣列名 這兩種情況下,陣列名表示整個陣列。其他情況下,陣列名均表示首元素的位址。所以這裡的 a...