溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言面試題有哪些

發(fā)布時(shí)間:2021-11-22 15:28:24 來源:億速云 閱讀:130 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“C語言面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C語言面試題有哪些”吧!

1、描述一下兩個(gè)語句的區(qū)別:

 char *p="hello";
 char  p[]="hello";

答案:

        (1)、char *p 代表指針 p 是一個(gè)指向字符常量的指針,指向一個(gè)常量區(qū)域,所以的話,就不能去修改內(nèi)存里面的內(nèi)容了,如果比如說采用 p[0]='F',這樣的話編譯器會(huì)報(bào)錯(cuò)。

         (2)、char p[] 中的 p 是一個(gè)被分配在一個(gè)可讀可寫內(nèi)存中的字符數(shù)組的首地址,就可以改變數(shù)組上的內(nèi)容。

2、當(dāng)一個(gè)函數(shù)中返回一個(gè)局部變量的指針時(shí)(如下面的例子),會(huì)發(fā)生什么問題?

void GetString()
{
    char p[] = "hello world";
    return p;
}

答案:

        (1)局部數(shù)組所占用的內(nèi)存空間是由編譯器分配在棧中的,當(dāng)函數(shù)返回時(shí),這些被占用的棧空間將被編譯器添加的代碼進(jìn)行退棧操作,這時(shí)原來存放在棧中的數(shù)據(jù)就統(tǒng)統(tǒng)變成了無效數(shù)據(jù)了。因此,返回出去的指針將指向一塊無效的??臻g,任何通過這個(gè)指針對(duì)其所指向的內(nèi)容的訪問都是無效(數(shù)據(jù)可能已經(jīng)被后續(xù)的棧操作所改變)和危險(xiǎn)的(通過這個(gè)指針?biāo)鶎懭氲臄?shù)據(jù)有可能沖掉后續(xù)棧操作壓人的有效數(shù)據(jù))。

3、c語言里面使用volatil關(guān)鍵字來修飾變量,請(qǐng)說明它的用法以及常用用法?

答案:

        (1) volatile 的作用是告訴編譯器,它修飾的變量隨時(shí)都可能被改變,因此,編譯后的程序每次在使用該變量的值時(shí),都會(huì)從該變量的地址中讀取數(shù)據(jù),而不是從寄存器中獲取(換句話來理解就是,一個(gè)定義為 volatile 的變量是說這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份)。下面舉個(gè)例子,比較容易出錯(cuò):

 int square(volatile int *p)
 {
      return (*p) * (*p)
 }

這里的話,是想計(jì)算指針 p 所指向內(nèi)存的值的平方,但是這里使用了 volatile ,可能的話就達(dá)不到你要的結(jié)果了,我們可以換種寫法更加直接明了:

 int square(volatile int *p)
 {
      int a,b;
      a=*p;
      b=*p;

     return a * b;
 }

正確的寫法可以參考這個(gè):

 int square(volatile int *p)
 {
      int a;
      a=*p;

     return a * a;
 }

小結(jié):這個(gè)關(guān)鍵字的反面使用,就是不希望改變,可以使用關(guān)鍵字 const 的用法,有關(guān) const 的用法,讀者可以看看自己掌握了多少?

        (2)、它的常見用法:

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

  • 一個(gè)中斷服務(wù)子程序中會(huì)訪問到的非自動(dòng)變量。

  • 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量。

到此,相信大家對(duì)“C語言面試題有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI