您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言面試題有哪些”吧!
1、描述一下兩個語句的區別:
char *p="hello";
char p[]="hello";
答案:
(1)、char *p 代表指針 p 是一個指向字符常量的指針,指向一個常量區域,所以的話,就不能去修改內存里面的內容了,如果比如說采用 p[0]='F',這樣的話編譯器會報錯。
(2)、char p[] 中的 p 是一個被分配在一個可讀可寫內存中的字符數組的首地址,就可以改變數組上的內容。
2、當一個函數中返回一個局部變量的指針時(如下面的例子),會發生什么問題?
void GetString()
{
char p[] = "hello world";
return p;
}
答案:
(1)局部數組所占用的內存空間是由編譯器分配在棧中的,當函數返回時,這些被占用的棧空間將被編譯器添加的代碼進行退棧操作,這時原來存放在棧中的數據就統統變成了無效數據了。因此,返回出去的指針將指向一塊無效的棧空間,任何通過這個指針對其所指向的內容的訪問都是無效(數據可能已經被后續的棧操作所改變)和危險的(通過這個指針所寫入的數據有可能沖掉后續棧操作壓人的有效數據)。
3、c語言里面使用volatil關鍵字來修飾變量,請說明它的用法以及常用用法?
答案:
(1) volatile 的作用是告訴編譯器,它修飾的變量隨時都可能被改變,因此,編譯后的程序每次在使用該變量的值時,都會從該變量的地址中讀取數據,而不是從寄存器中獲取(換句話來理解就是,一個定義為 volatile 的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份)。下面舉個例子,比較容易出錯:
int square(volatile int *p)
{
return (*p) * (*p)
}
這里的話,是想計算指針 p 所指向內存的值的平方,但是這里使用了 volatile ,可能的話就達不到你要的結果了,我們可以換種寫法更加直接明了:
int square(volatile int *p)
{
int a,b;
a=*p;
b=*p;
return a * b;
}
正確的寫法可以參考這個:
int square(volatile int *p)
{
int a;
a=*p;
return a * a;
}
小結:這個關鍵字的反面使用,就是不希望改變,可以使用關鍵字 const 的用法,有關 const 的用法,讀者可以看看自己掌握了多少?
(2)、它的常見用法:
并行設備的硬件寄存器(如:狀態寄存器)。
一個中斷服務子程序中會訪問到的非自動變量。
多線程應用中被幾個任務共享的變量。
到此,相信大家對“C語言面試題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。