日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

1、C语言面试笔试---变量定义和声明

發(fā)布時(shí)間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1、C语言面试笔试---变量定义和声明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1、背景
  • 2、變量定義和聲明
    • 1、局部變量和全局變量
    • 2、變量的存儲(chǔ)類別
    • 3、例題
    • 4、內(nèi)存泄漏

1、背景

2019秋招馬上開始了,今天已經(jīng)是7月30號(hào)了,趕緊刷刷C語(yǔ)言,爭(zhēng)取在8月中旬刷完C語(yǔ)言,在8月末再加強(qiáng)鞏固,一來(lái)是可以準(zhǔn)備面試筆試,二來(lái)是可以通過(guò)重新對(duì)C語(yǔ)言的認(rèn)識(shí),加速STM32的學(xué)習(xí),為FPGA的軟核硬核打下基礎(chǔ)。本系列是針對(duì)以前學(xué)過(guò)C語(yǔ)言,但是后來(lái)就沒怎么用了的,非針對(duì)一點(diǎn)基礎(chǔ)都沒有的。

2、變量定義和聲明

1、局部變量和全局變量

**局部變量:**在函數(shù)內(nèi)部定義的變量為內(nèi)部變量,所以局部變量的作用于受限于定義它的函數(shù)。
**全局變量:**在函數(shù)之外定義的變量為外部變量,它的作用于為定從定義變量的位置開始到本源程序文件結(jié)束,稱之為全局變量,所以全局變量的作用于僅限制于定義它的源程序文件。
特此說(shuō)明定義在main函數(shù)里面,并不是全局變量,只是局部變量

2、變量的存儲(chǔ)類別

變量的存儲(chǔ)類別可以分為動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ)。其中動(dòng)態(tài)存儲(chǔ)包含:auto自動(dòng)變量,register寄存器變量。靜態(tài)存儲(chǔ)包括:extern外部變量和static靜態(tài)變量。比如說(shuō)int a[10] 一旦遇到這個(gè)定義,系統(tǒng)采用靜態(tài)方式分配10個(gè)int空間給a,無(wú)論程序向數(shù)組a中放不放元素,這一片空間都被占用,他也屬于自動(dòng)變量,當(dāng)超出作用范圍系統(tǒng)自動(dòng)釋放其內(nèi)存空間。
如下圖所示,內(nèi)存空間可以分為4部分。**以下這個(gè)圖片要牢記。**注意對(duì)于對(duì)空間頻繁地malloc/free會(huì)造成空間的不連續(xù),從而造成大量的碎片,使程序效率降低。

```c #include <stdio.h> int n; void main() {static p;printf("%d\n%d\n",n,p); }


上面,我舉了個(gè)例子,我們可以看到驗(yàn)證了BSS,全局變量和靜態(tài)局部變量存儲(chǔ)在BSS中,BSS段用來(lái)存放程序中為初始化的全局變量和未初始化的靜態(tài)局部變量,在執(zhí)行程序時(shí),BSS段會(huì)預(yù)先清空,所以存儲(chǔ)在BSS段中的變量均默認(rèn)是0,這就是為什么外部變量和靜態(tài)局部變量可以不初始化,但是會(huì)被賦予默認(rèn)值0.

3、例題

說(shuō)出下變變量存儲(chǔ)類型,以及輸出結(jié)果

```c #include <stdio.h> static int a=1; void fun1(void) { a=2; } void fun2(vod) { int a=3; } void fun3(void) { static int a=4; } int main() { printf("%d\n",a); fun1(); printf("%d\n",a); fun2(); printf("%d\n",a); fun3(); printf("%d\n",a);}


注意只有fun1,才是改變?nèi)朱o態(tài)變量的值。其余均不能改變。

4、內(nèi)存泄漏

**內(nèi)存泄漏(Memory Leak)**是指程序中己動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無(wú)法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。
如何避免內(nèi)存泄漏?
例題:
什么是內(nèi)存泄漏?面對(duì)內(nèi)存泄漏和指針越界,你有什么方法?你通產(chǎn)采用哪些方法啦避免和減少這類錯(cuò)誤?
在程序中采用動(dòng)態(tài)分配函數(shù)開辟堆空間,使用完畢后沒有釋放,一直占用內(nèi)存空間導(dǎo)堆控件耗盡,稱之為內(nèi)存泄漏。
為了避免和減少內(nèi)存泄漏及指針越界這類錯(cuò)誤,可以采用以下基本方法:
采用malloc等函數(shù)動(dòng)態(tài)分配的空間在不需要時(shí)及時(shí)通過(guò)free函數(shù)釋放掉。
定義指針后務(wù)必初始化,即使沒有初始化為指向特定的地址空間也要初始化為NULL。
指針在使用前需要校驗(yàn)是否為空
記住指針的長(zhǎng)度,在移動(dòng)指針時(shí)避免地址越界。
動(dòng)態(tài)分配內(nèi)存的指針最好不要再賦值。

總結(jié)

以上是生活随笔為你收集整理的1、C语言面试笔试---变量定义和声明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。