C C 筆試題 一

2021-06-18 12:15:35 字數 4405 閱讀 5426

1.

#include

class shape

~shape()

int main()

int aaa;

std::cin>>aaa;

輸出的是ctorctordtor,因為b沒有呼叫delete析構

a與b有什麼區別了,就是乙個在棧上,乙個在堆上嗎?

2.c語言是從那種語言發展而來的?   

答案很直接,從b語言發展而來的--_--

3.char *str = "hello";  與 char str2 = "hello"; 有什麼區別?

char *str = "hello";

char str2 = "hello2";

str2[0] = 'm'; //會執行報錯,非法訪問

str[0] = 'x';     //這個就不會報錯

為什麼了?

(在寫程式的時候,如何能夠讓控制台程式在執行完之後不要一閃而逝,而是出現press any key to continue...了?

就是按ctrl + f5執行,就是不進行除錯,直接執行。

還有一種方法就是

#include

system("pause");  //還有那些system命令了??

我想知道的是"hello"和「hello2」分別存在什麼地方?

4.標頭檔案省略

int _tmain(int argc, _tchar* argv)

int x = 100;

int y = 200;

int z = 300;

//printf("x 變數的位址是%x\n",&x);

printf("x 變數的位址是%p\n",&x);

printf("x 變數的大小是%d\n",sizeof(x));

//printf("y 變數的位址是%x\n",&y);

printf("y 變數的位址是%p\n",&y);

printf("y 變數的大小是%d\n",sizeof(y));

//printf("z 變數的位址是%x\n",&z);

printf("z 變數的位址是%p\n",&z);

printf("z 變數的大小是%d\n",sizeof(z));

system("pause");

在release狀態下會輸出如下結果:

x 變數的位址是001dfce4

x 變數的大小是4

y 變數的位址是001dfce8

y 變數的大小是4

z 變數的位址是001dfcec

z 變數的大小是4

請按任意鍵繼續. . .

但是在debug狀態下,會輸出如下結果,x,y之間相距12個位元組,這可能是debug狀態下,編譯器加入了一些多餘的資訊進去。

x 變數的位址是0027f7c0

x 變數的大小是4

y 變數的位址是0027f7b4

y 變數的大小是4

z 變數的位址是0027f7a8

z 變數的大小是4

請按任意鍵繼續. . .

5.大小端的問題

unsigned int a=0x12345678;

char *c=(char*)&a;

printf("%x %x %x\n",*c,*(c+1),*(c+1)+1);

輸出分別為:78,56,57

big-endian,little-endian看到過好多次了,但是還是沒有弄的太明白。。。

今天就來好好搞定它

這篇部落格講的不錯:

其中的這個栗子很好

舉個例子,從記憶體位址0x0000開始有以下資料

0x0000    0x12

0x0001    0x34

0x0002    0xab

0x0003    0xcd

如果我們去讀取乙個位址為0x0000的四個位元組變數:

若位元組序為big-endian,則讀出結果為0x1234abcd;

若位元組序位little-endian,則讀出結果為0xcdab3412.

如果我們將0x1234abcd寫入到以0x0000開始的記憶體中,則結果為:

big-endian      little-endian

0x0000          0x12                  0xcd

0x0001          0x23                  0xab

0x0002          0xab                  0x34

0x0003          0xcd                  0x12

6.const char*, char const*, char*const

const char*, char const*, char*const的區別問題幾乎是c++面試中每次    都會有的題目。 事實上這個概念誰都有只是三種宣告方式非常相似很容易記混。 bjarne在他的the c++ programming language裡面給出過乙個助記的方法: 把乙個宣告從右向左讀。 

char  * const cp; ( * 讀成 pointer to ) --- cp is a const pointerto char

const char * p; ---- p is a pointer toconst char;

char const * p;  ---- 因為c++裡面沒有const*的運算子,所以const只能屬於前面的兩種型別。

也可以這樣理解,const離誰近,那個就是const。

const char * p中const離char比較近,那麼就說明*p的內容不能修改。

char* const  p中的const離p比較近,那麼就說明p的內容不能修改,即p不能指向別的位址了。

還有一種情況 const char* const  p 表示p和*p都不能修改。

這個部落格也提到了這個問題,講的不錯

7.scanf("%lf %lf",&x,&y);

這句程式中,x,y都是double型的。%後的是lf而不是1f,是英文本母中的「l」,除錯了半天就是輸入不了。。。。

scanf如果要輸入double型的數,就必須使用lf。

8.int *p[n], int (*)p[n], int *p(), int (*)p()的區別

int *p[n]到時認識,表示的存了n個整數型指標的陣列。

int (*)p[n],這個就不太熟悉了。在vs2008上報錯,改寫成這樣int (*p)[n]就好了。

例子如下:

int m[3][4]=;

int (*p)[4];

p = m;

for(int i = 0; i < 5; i++)

coutcout<

上面程式中,兩個的輸出是一樣的。

int *p()也比較好理解,就是返回int型指標的函式。

int (*p)(), 這個是函式指標(int (*)p()好像也會報錯)。我們知道,我們定義乙個函式時,比如int f(),其實函式就是一段**,而f就是指向這個**開始的地方,也就是乙個位址。

9.陣列越界問題

陣列發生越界訪問時,可能出錯,程式崩潰,也可能執行正常,所以存在不確定型,比較危險。

下面是乙個比較複雜一點的例子,考到了陣列越界問題,也考到了unsigned char的範圍

const int max = 255;

unsigned char a[max],i;

for (i=0;i<=max;i++)

a[i]=i;

a[255] = 255發生了越界訪問,但是不一定會出錯,但是i=255之後,i++,i又回到了0,然後進行判斷i<=255,成功,會一直迴圈下去。

char

型別為乙個位元組,取值範圍是

[-128

,127]

,unsigned char [0,255]。

10.memset ,memcpy, strcpy的區別

extern void *memset(void *buffer, char c, int count);

把buffer

所指記憶體區域的前

count

個位元組設定成字元

c。返回指向

buffer

的指標。

extern void *memcpy(void *dest, void *src, unsigned int count);

由src所指記憶體區域複製count個位元組到dest所指記憶體區域。

src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。

extern char *strcpy(char *dest,char *src); 

把src所指由null結束的字串複製到dest所指的陣列中。

src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

一些筆試題(C C )

1.there are two variables,don t use if.else or or switch or other judgement statements,find out the biggest number of the two numbers.返回2個數中較大的數,不使用if...

C C 筆試題集錦

1.求下面函式的返回值 微軟 int func x int countx 0 while x countx x x x 1 return countx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。2.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的...

C C 技術筆試題

指標 include void getmemery char p,int num int main 答案 程式崩潰。實際上分配記憶體的只是形參p的乙個副本,函式呼叫結束後p又沒有返回給str,strcpy的str實際上是沒有分配記憶體。如果想不通過返回值的方式給str分配記憶體,程式如下。inclu...