欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言修煉之路悟徹數(shù)組真妙理?巧用下標(biāo)破萬敵下篇

 更新時間:2022年02月26日 15:49:58   作者:玄澈_  
在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個字符串,使字符串處理更加方便、靈活

(壹)冒泡排序

1.1冒泡排序的設(shè)計

冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢"浮"到數(shù)列的頂端。

1.2冒泡排序的步驟

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。
  • 針對所有的元素重復(fù)以上的步驟,除了最后一個。
  • 持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

??動圖演示1(數(shù)據(jù)較小)

??動圖演示2(數(shù)據(jù)較大)

1.3冒泡排序的實現(xiàn)

Tips:每一趟冒泡排序后都會減少一個需要比較的數(shù) -->  因為每一趟的冒泡排序都會將所比較的最大/最小值移動到數(shù)組的最后面

(貳)數(shù)組作為函數(shù)參數(shù)

往往我們在寫代碼的時候,會將數(shù)組作為參數(shù)傳個函數(shù),比如:我要實現(xiàn)一個冒泡排序(這里要講算法思想)函數(shù)將一個整形數(shù)組排序。 那我們將會這樣使用該函數(shù):

2.1冒泡排序函數(shù)的錯誤設(shè)計

接下來看一個例子

最后結(jié)果:

并沒有預(yù)料中的達(dá)到排序的作用

在我們之前的學(xué)習(xí)中,我們知道了 數(shù)組名表示的數(shù)組首元素的地址 

數(shù)組名在傳遞給函數(shù)的時候,會降級變成首元素的地址

數(shù)組名單獨(dú)放在sizeof內(nèi)部的時候 ,如:sizeof(arr),這里的arr表示整個數(shù)組而不是首元素的地址

對數(shù)組名進(jìn)行&取地址后的操作

我們知道,對指向數(shù)組元素的指針進(jìn)行自增運(yùn)算是跳過一個元素(所占字節(jié)數(shù)的地址),其實本質(zhì)是跳過一個其指針類型大小。對數(shù)組名進(jìn)行取地址后獲得的是數(shù)組的地址,如果將它和數(shù)組首元素地址以及數(shù)組名打印出來,會發(fā)現(xiàn)它們的值是一樣的。但如果對&arr進(jìn)行+1等操作,就會發(fā)現(xiàn)跳過的不是一個元素的大小,而是一個數(shù)組的大小。

2.2冒泡排序函數(shù)的正確設(shè)計

當(dāng)數(shù)組傳參的時候,實際上只是把數(shù)組的首元素的地址傳遞過去了。所以即使在函數(shù)參數(shù)部分寫成數(shù)組的形式:int arr[]表示的依然是一個指針:int *arr。那么,函數(shù)內(nèi)部的sizeof(arr)結(jié)果是4。

(叁)對數(shù)組名的拓展解析

數(shù)組名就是首元素的地址,但是有兩個例外

  • sizeof(數(shù)組名),這里的數(shù)組名表示整個數(shù)組,sizeof(數(shù)組名)表示的是整個數(shù)組的大小
  • &數(shù)組名,這里的數(shù)組名表示的是整個數(shù)組,取出的是整個數(shù)組的地址

 &arr取出的是整個數(shù)組的地址,所以 arr + 1后跳過了整個數(shù)組的大小為 

4 * 10 = 40 個字節(jié)的地址大小

C游記之旅至此,大家也掌握了一定的技能,推薦大家可以跟著下面這篇文章,去實現(xiàn)一個屬于自己的三子棋游戲哦 

【入門級C語言小游戲】——“三子棋” 

到此這篇關(guān)于C語言修煉之路悟徹數(shù)組真妙理 巧用下標(biāo)破萬敵下篇的文章就介紹到這了,更多相關(guān)C語言 數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows上CLion的配置步驟詳解

    Windows上CLion的配置步驟詳解

    這篇文章主要介紹了Windows上CLion的配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 總結(jié)UNIX/LINUX下C++程序計時的方法

    總結(jié)UNIX/LINUX下C++程序計時的方法

    本文總結(jié)了下UNIX/LINUX下C++程序計時的一些函數(shù)和方法,對日常使用C++程序的朋友很有幫助,有需要的小伙伴們可以參考學(xué)習(xí),下面一起來看看吧。
    2016-08-08
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之單鏈表

    單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。本文將為大家介紹C語言中單鏈表的基本概念與讀取數(shù)據(jù)元素,需要的可以參考一下
    2021-12-12
  • 基于C++自動化編譯工具的使用詳解

    基于C++自動化編譯工具的使用詳解

    本篇文章是對C++中自動化編譯工具的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言冒泡排序超全面實現(xiàn)流程

    C語言冒泡排序超全面實現(xiàn)流程

    算法中排序是十分重要的,而每一個學(xué)習(xí)計算機(jī)的都會在初期的時候接觸到這種排序,下面這篇文章主要給大家介紹了關(guān)于c語言冒泡排序的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C++中的vector使用詳解及重要部分底層實現(xiàn)

    C++中的vector使用詳解及重要部分底層實現(xiàn)

    本篇文章會對vector的語法使用進(jìn)行詳解,同時,還會對重要難點(diǎn)部分的底層實現(xiàn)進(jìn)行講解,其中有vector的迭代器失效和深拷貝問題,希望本篇文章的內(nèi)容會對你有所幫助
    2023-07-07
  • C++ OpenCV實戰(zhàn)之圖像透視矯正

    C++ OpenCV實戰(zhàn)之圖像透視矯正

    這篇文章主要介紹了通過C++ OpenCV實現(xiàn)圖像的透視矯正,文中的示例代碼講解詳細(xì),對我們的學(xué)習(xí)或工作有一定的參考價值,感興趣的可以了解一下
    2022-01-01
  • 完美解決QT?QGraphicsView提升到QChartView報錯的問題

    完美解決QT?QGraphicsView提升到QChartView報錯的問題

    使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報錯呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報錯解決方案,感興趣的朋友一起看看吧
    2023-05-05
  • C語言實現(xiàn)學(xué)生管理系統(tǒng)總結(jié)

    C語言實現(xiàn)學(xué)生管理系統(tǒng)總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 詳解C++ cout格式化輸出完全攻略

    詳解C++ cout格式化輸出完全攻略

    這篇文章主要介紹了詳解C++ cout格式化輸出完全攻略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論