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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C:模块化程序设计 以及数组

發(fā)布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C:模块化程序设计 以及数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊化:

舉例:

繼續(xù)細(xì)化上述模塊,猜完一個數(shù)字之后,繼續(xù)再猜:

再細(xì)化計算機(jī)生成數(shù)字:

??

數(shù)據(jù)類型前邊都加入了一個const,把他聲明為整形常量的原因,當(dāng)你這個參數(shù)被聲明為const的時候就可以起到保護(hù)參數(shù)的值不被改寫。而此處在這兩個函數(shù)內(nèi)部不需要改寫這兩個參數(shù)的值,只是判斷他倆對不對,所以此處假如const的好處,一旦你在這里邊被改寫了,被聲明為const的這個變量,編譯器編譯的時候就會報錯。所以他會起到一個保護(hù)需要不被改寫的數(shù)據(jù)不被改寫的這樣的一個作用。

數(shù)組

但是定義的時候不允許是變量。

如果數(shù)組元素的值沒有初始化,那么他的初始值同樣是隨機(jī)數(shù)。

沒有初始化的元素自動初始化為0。

有沒有更高效的初始化的方法呢?見下

初始化的方法:調(diào)用memset()函數(shù),把內(nèi)存當(dāng)中的內(nèi)存單元給他初始化為0。多少個單元初始化為0呢?我們用sizeof(a)計算數(shù)組a在內(nèi)存當(dāng)中占用的字節(jié)數(shù),把這些字節(jié)單元里邊的值都初始化為0值。高效的賦值方法:(一個數(shù)組的數(shù)值元素賦值給另外一個數(shù)組)調(diào)用memcpy()函數(shù)。把a(bǔ)數(shù)組元素中的值賦值給數(shù)組b元素。同樣要指定a數(shù)組元素當(dāng)中多少個字節(jié)的值來賦值給b。所以使用sizeof來獲取數(shù)組a所占用的內(nèi)存單元的字節(jié)數(shù)。

雖然二維數(shù)組表示幾行幾列,但是在內(nèi)存中也是線性存儲的。因為列數(shù)決定了偏移量是多大。

根據(jù)數(shù)組的類型,定義數(shù)組的時候要聲明它的類型,根據(jù)他的數(shù)據(jù)類型是決定在內(nèi)存當(dāng)中每一個數(shù)組元素占多少個字節(jié),數(shù)據(jù)類型前邊再加上存儲類型的話,說明是安排在靜態(tài)存儲區(qū)存儲呢還是動態(tài)存儲區(qū)存儲呢,這個時候是決定的編輯器為他分配的存儲區(qū)域。

首先定義一個字符型的數(shù)組,因為字符型的數(shù)組里邊的每一個元素只占用一個字節(jié)。

上述代碼中%p,是輸出a他在內(nèi)存當(dāng)中占的內(nèi)存單元的地址。起始地址。

\000是什么意思?這里邊的000是幾進(jìn)制的?如果是反斜杠就表示他是轉(zhuǎn)移字符,后面的三位數(shù)字代表他是一個8進(jìn)制的數(shù);上述數(shù)組每一行不是4列嗎?為什么只初始化了3個8進(jìn)制數(shù)呢?因為這是一個字符串,字符串后邊有一個結(jié)束標(biāo)志,這里邊沒有顯示出來,所以這里邊是一個字符串結(jié)束標(biāo)志。字符串結(jié)束標(biāo)志是一個ASCII碼為0的那一個字符,他這里邊沒有顯示。

對a[0][4]和a[1][0]賦值,這兩個實際指的是同一個元素,因為這個二維數(shù)組在內(nèi)存當(dāng)中也是線性存儲的,那么他的位置在哪里呢就是首地址加上偏移量。偏移量怎么算的呢?a[0][4]的偏移量就是0乘上他每一行的列數(shù)是4加上4等于4;a[1][0]是1乘上4加上0也是4。所以實際上他的偏移量是一樣的,指向的是同一個位置。

但是a[0][4]是越界的,但是寫出來是合法的,因為他不檢查下邊越界,所以寫出來還是合法的。

以前使用的是普通變量做函數(shù)參數(shù),現(xiàn)在可以向函數(shù)傳遞一個數(shù)組,數(shù)組做函數(shù)參數(shù)和普通變量做函數(shù)參數(shù)有什么區(qū)別呢?

普通變量做函數(shù)參數(shù)我們稱他為按值傳遞參數(shù),按值傳參就是把一個實參的副本,拷貝一份傳遞給形參,形參得到的只是實參的一個副本,所以實參和形參在內(nèi)存當(dāng)中是占不同的存儲單元的,二者是不會互相打架的。(形參值的改變不會影響實參,因為他們實參和形參在內(nèi)存中占不同的存儲單元,占的地址不同;就算同名也沒關(guān)系,因為地址不同。)

數(shù)組做函數(shù)參數(shù)就不是按值傳參了,稱他為按引用傳參。按引用傳參就是拷貝數(shù)組的地址值,來傳遞給形參。(如果拷貝一個地址值給形參和把這個數(shù)組的全部的元素值拷貝一份給這個形參,哪一個效率高啊?顯然傳遞一個地址效率高得多,你傳全部的數(shù)組元素效率要低啊,所以他的設(shè)計就是為了高效起見,傳一個地址值,傳遞一個地址值相當(dāng)于我這兩個小房子鑰匙我多配了一把給你,你也能進(jìn)去我也能進(jìn)去,那你修改了我就能看見了,對我就有影響了,那實參和形參數(shù)組他是占用同一個內(nèi)存單元,所以你這個形參數(shù)組的值改變了會影響到實參數(shù)組的值,這就是數(shù)組做函數(shù)參數(shù)和普通變量做函數(shù)參數(shù)的區(qū)別。)但是你說你這個形參在離開這個函數(shù)的時候被釋放了,被釋放了沒有關(guān)系啊,我這個實參呢,我的地址還在,我還能夠去訪問這個修改后的這個值。

排序算法:

總結(jié)

以上是生活随笔為你收集整理的C:模块化程序设计 以及数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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