chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

指數(shù)指針的相關(guān)知識(shí)

AGk5_ZLG_zhiyua ? 來(lái)源:未知 ? 作者:佚名 ? 2017-09-14 13:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

周立功教授數(shù)年之心血之作《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》,書(shū)本內(nèi)容公開(kāi)后,在電子行業(yè)掀起一片學(xué)習(xí)熱潮。經(jīng)周立功教授授權(quán),本公眾號(hào)特對(duì)本書(shū)內(nèi)容進(jìn)行連載,愿共勉之。

第一章為程序設(shè)計(jì)基礎(chǔ),本文為1.8.3 指針數(shù)組。

>>>>1.字符串與指針數(shù)組

如果有以下定義:

int data0 = 1, data1 = 2, data2 = 3;

int *ptr0 = &data0, *ptr1 = &data1, *ptr2 = &data2;

實(shí)際上地址也是數(shù)據(jù),那么數(shù)組也可以保存指針,因此可以在基本數(shù)據(jù)類(lèi)型的基礎(chǔ)上派生一個(gè)構(gòu)造類(lèi)型,即將相同類(lèi)型的指針變量集合在一起有序地排列構(gòu)成指針數(shù)組。在指針數(shù)組變量的每一個(gè)元素中存放一個(gè)地址,并用下標(biāo)區(qū)分它們。雖然數(shù)組與指針數(shù)組存儲(chǔ)的都是數(shù)據(jù),但還是有細(xì)微的差別。數(shù)組存儲(chǔ)的是相同類(lèi)型的字符或數(shù)值,而指針數(shù)組存儲(chǔ)的是相同類(lèi)型的指針。比如:

int data0, data1, data2;

int *ptr[3] = {&data0, &data1, &data2};

該聲明被解釋為ptr是指向int的指針的數(shù)組(元素個(gè)數(shù)3),“int *[3]”類(lèi)型名被解釋為指向int的指針的數(shù)組(元素個(gè)數(shù)3)類(lèi)型。即ptr指針數(shù)組是數(shù)組元素為3個(gè)指針的數(shù)組,其本質(zhì)是數(shù)組,類(lèi)型為int *[3],ptr[0]指向&data0,ptr[1]指向&data1,ptr[2]指向&data2。

由于ptr聲明為指針數(shù)組,因此ptr[0]返回的是一個(gè)地址。當(dāng)用*ptr[i]解引用指針(i=0~2)時(shí),則得到這個(gè)地址的內(nèi)容,即*ptr[0]==1,*ptr[1]==2,*ptr[2]==3。當(dāng)然,也可以使用等價(jià)的指針表示法,ptr+i表示數(shù)組第i個(gè)元素的地址。如果要修改這個(gè)地址中的內(nèi)容,可以使用*(ptr+i)。如果對(duì)**(ptr+i)解引用兩次,則返回所分配的內(nèi)存的位置,即可對(duì)其賦值。比如,ptr[1]位于地址&ptr[1],表達(dá)式ptr+1返回&ptr[1],用*(ptr+1)則得到指針&data1,再用**(ptr+i)解引用得到&data1的內(nèi)容“1”。由此可見(jiàn),使用指針的指針表示法,讓我們知道正在處理的是指針數(shù)組。

顯然,只要初始化一個(gè)指針數(shù)組變量保存各個(gè)字符串的首地址,即可引用多個(gè)字符串:

char * keyWord[5] = {"eagle", "cat", "and", "dog", "ball"};

其中,keyWord[0]的類(lèi)型是char*,&keyWord[0]的類(lèi)型是char **。雖然這些字符串看起來(lái)好像存儲(chǔ)在keyWord指針數(shù)組變量中,但指針數(shù)組變量中實(shí)際上只存儲(chǔ)了指針,每一個(gè)指針都指向其對(duì)應(yīng)字符串的第一個(gè)字符。也就是說(shuō),第i個(gè)字符串的所有字符存儲(chǔ)在存儲(chǔ)器中的某個(gè)位置,指向它的指針存儲(chǔ)在keyWord [i]中,即keyWord [0]指向“"eagle"”、keyWord [1]指向“"cat"”,keyWord[2]指向 "ant",keyWord[3]指向 "dog",keyWord[4]指向 "ball"。

盡管keyWord的大小是固定的,但它訪問(wèn)的字符串可以是任意長(zhǎng)度,這種靈活性是C語(yǔ)言強(qiáng)大的數(shù)據(jù)構(gòu)造能力的一個(gè)有力的證明。由于指針數(shù)組是元素為指針變量的數(shù)組,因此一個(gè)字符指針數(shù)組可以用于處理多個(gè)字符串。顯然,將字符串制成一個(gè)表存放于指針數(shù)組的話(huà),比使用switch語(yǔ)句效果更好。由此可見(jiàn),數(shù)據(jù)的隨機(jī)存儲(chǔ)會(huì)以?xún)煞N形式保存:存址和存值,存址方式詳見(jiàn)圖 1.14。一個(gè)數(shù)組包含了指向?qū)嶋H信息的指針,而不是直接將信息存儲(chǔ)在數(shù)組元素的存儲(chǔ)空間里。使用這種方式,可以靈活地存儲(chǔ)和排序任何復(fù)雜結(jié)構(gòu)的數(shù)據(jù)。

圖 1.14 存址方式

相反地,基于值的存儲(chǔ)將n個(gè)元素的數(shù)據(jù)集合打包存儲(chǔ)在固定大小的記錄塊中,這個(gè)固定大小為s,存值方式詳見(jiàn)圖 1.15,每個(gè)字符串占用大小為6字節(jié)的連續(xù)存儲(chǔ)塊。

圖 1.15 存值方式

為了便于說(shuō)明多個(gè)字符串的引用,將設(shè)計(jì)一個(gè)數(shù)據(jù)交換函數(shù)。由于任何數(shù)據(jù)類(lèi)型的指針都可以給void*指針賦值,因此可以利用這一特性,將void*指針作為byte_swap()函數(shù)的形參,即可接受任何類(lèi)型數(shù)據(jù)。

由于C中最小長(zhǎng)度的變量為char類(lèi)型(包括unsigned char、signed char等),其sizeof(char)的結(jié)果為1,而其它任何變量的長(zhǎng)度都是它的整數(shù)倍。比如,在32位系統(tǒng)中,sizeof(int)為4。由于C語(yǔ)言的變量類(lèi)型多種多樣,因此不可能為每一種變量類(lèi)型編號(hào),而且swap也并不關(guān)心變量的真正類(lèi)型,所以可以用變量的長(zhǎng)度代替變量類(lèi)型。byte_swap函數(shù)原型為:

void byte_swap(void *pData1, void *pData2, size_t stSize);

其中,size_t是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)中預(yù)定義的類(lèi)型,專(zhuān)門(mén)用于保存變量的大小。stSize為變量的長(zhǎng)度,pData1、pData2分別為是要比較的第1、2個(gè)參數(shù)。當(dāng)返回值< 0時(shí),表示pData1 < pData2;當(dāng)返回值= 0時(shí),表示pData1 = pData2;當(dāng)返回值> 0時(shí),表示pData1 > pDta2。

在這里,任何類(lèi)型的指針都可以傳入byte_swap()中,真實(shí)地體現(xiàn)了內(nèi)存操作函數(shù)的意義,無(wú)論這塊內(nèi)存是什么數(shù)據(jù)類(lèi)型,它操作的對(duì)象僅僅是一塊內(nèi)存。無(wú)論用戶(hù)傳進(jìn)來(lái)的是什么類(lèi)型,從C99版本后,將void *類(lèi)型指針賦值給其它類(lèi)型指針時(shí),不再需要強(qiáng)制類(lèi)型轉(zhuǎn)換。即循環(huán)一次交換一個(gè)字節(jié),那么對(duì)于int類(lèi)型數(shù)據(jù)來(lái)說(shuō),僅需循環(huán)4次就可以了。其前提是兩個(gè)變量的類(lèi)型必須相同,比如,交換a、b兩個(gè)變量的值,其使用方法如下:

byte_swap(&a, &b, sizeof(a));

byte_swap()數(shù)據(jù)交換函數(shù)的接口與實(shí)現(xiàn)詳見(jiàn)程序清單 1.42和程序清單 1.43。

程序清單1.42swap數(shù)據(jù)交換函數(shù)接口(swap.h)

1 #pragma once

2 void byte_swap(void *pData1, void *pData2, size_t stSize);

程序清單1.43swap數(shù)據(jù)交換函數(shù)接口的實(shí)現(xiàn)(swap.c)

1 void byte_swap(void *pData1, void *pData2, size_t stSize)

2 {

3 unsigned char *pcData1 = pData1;

4 unsigned char *pcData2 = pData2;

5 unsigned char ucTemp;

6

7 while (stSize--){

8 ucTemp = *pcData1; *pcData1 = *pcData2; *pcData2 = ucTemp;

9 pcData1++; pcData2++;

10 }

11 }

針對(duì)特定的字符串,指針數(shù)組的應(yīng)用示例詳見(jiàn)程序清單 1.44。

程序清單1.44比較字符串大小然后輸出范例程序

1 #include

2 #include

3 #include "swap.h"

4

5 const char * keyWord[5] = {"eagle", "cat", "and", "dog", "ball"};

6 void show_str (void) //打印keyWord數(shù)據(jù)

7 {

8 for (int i = 0; i < sizeof(keyWord) / sizeof(keyWord[0]); i ++){

9 printf("%s", keyWord[i]);

10 }

11 printf("\n");

12 }

13

14 int main(int argc, char *argv[])

15 {

16 show_str();

17

18 if(strcmp(keyWord[0], keyWord[1]) < 0)

19 byte_swap(keyWord, keyWord +1, sizeof(keyWord[0]));

20 show_str();

21 return 0;

22 }

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71197

原文標(biāo)題:周立功:你知道數(shù)組也能保存指針嗎?

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言指針知識(shí)科普

    指針是C語(yǔ)言最重要也是最難理解的部分,它在我們平時(shí)的工作中無(wú)處不在。
    發(fā)表于 09-26 10:26 ?654次閱讀

    經(jīng)典著作《C和指針

    《C和指針》提供與C語(yǔ)言編程相關(guān)的全面資源和深入討論。《C和指針》通過(guò)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性的探討,幫助程序員把
    發(fā)表于 11-26 10:17

    基礎(chǔ)知識(shí)講解:LED色溫和顯色指數(shù)的介紹

    要想了解LED照明,就必須了解LED色溫。所以每個(gè)LED產(chǎn)品設(shè)計(jì)者都必須先接觸LED色溫的相關(guān)知識(shí)。LED色溫的重要性足以影響產(chǎn)品的銷(xiāo)售,只有符合標(biāo)準(zhǔn)的色溫才能創(chuàng)造舒適的照明環(huán)境,本文介紹的就是LED色溫和顯色指數(shù)的基礎(chǔ)
    發(fā)表于 11-05 08:03 ?1.1w次閱讀

    C語(yǔ)言基礎(chǔ)教程之指針知識(shí)點(diǎn)和使用總結(jié)

    指針是一種特殊的變量。它的特殊性表現(xiàn)在哪些地方呢?由于指針是一種變量,它就應(yīng)該具有變量的三要素:名字、類(lèi)型和值。于是指針的特殊性就應(yīng)表現(xiàn)在這蘭個(gè)要素上。指針的名字與一般變量的規(guī)定相同,
    發(fā)表于 11-13 17:55 ?6次下載
    C語(yǔ)言基礎(chǔ)教程之<b class='flag-5'>指針</b>的<b class='flag-5'>知識(shí)</b>點(diǎn)和使用總結(jié)

    C和指針課后題答案完整版免費(fèi)下載

    本書(shū)提供與C語(yǔ)言編程相關(guān)的全面資源和深入討論。本書(shū)通過(guò)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性的探討,幫助程序員把指針的強(qiáng)大功能融入到自己的程序中去。
    發(fā)表于 11-13 08:47 ?0次下載

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針
    的頭像 發(fā)表于 06-29 15:38 ?1.5w次閱讀
    理解函數(shù)<b class='flag-5'>指針</b>、函數(shù)<b class='flag-5'>指針</b>數(shù)組、函數(shù)<b class='flag-5'>指針</b>數(shù)組的<b class='flag-5'>指針</b>

    C和指針的電子書(shū)免費(fèi)下載

    本書(shū)提供與C語(yǔ)言編程相關(guān)的全面資源和深入討論。本書(shū)通過(guò)對(duì)指針的基礎(chǔ)知識(shí)和高級(jí)特性的探討,幫助程序員把指針的強(qiáng)大功能融入到自己的程序中去。
    發(fā)表于 03-22 16:06 ?98次下載

    043-ACMICPC相關(guān)知識(shí)

    043-ACMICPC相關(guān)知識(shí)(開(kāi)關(guān)電源中高壓電容怎么選擇)-ACMICPC相關(guān)知識(shí);ACMICPC相關(guān)
    發(fā)表于 07-26 11:56 ?12次下載
    043-ACMICPC<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>

    總降調(diào)度相關(guān)知識(shí)

    總降調(diào)度相關(guān)知識(shí)(開(kāi)關(guān)電源技術(shù)與設(shè)計(jì)潘pdf)-總降調(diào)度相關(guān)知識(shí)? ? ? ? ? ? ? ? ? ?
    發(fā)表于 09-23 16:33 ?8次下載
    總降調(diào)度<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>

    數(shù)組相關(guān)的雙指針算法

    對(duì)于單鏈表來(lái)說(shuō),大部分技巧都屬于快慢指針,前文 單鏈表的六大解題套路 都涵蓋了,比如鏈表環(huán)判斷,倒數(shù)第K個(gè)鏈表節(jié)點(diǎn)等問(wèn)題,它們都是通過(guò)一個(gè)fast快指針和一個(gè)slow慢指針配合完成任務(wù)。
    的頭像 發(fā)表于 04-28 16:22 ?2065次閱讀

    C語(yǔ)言_字符串與指針的練習(xí)

    這篇文章涉及到字符串與指針知識(shí)點(diǎn)的相關(guān)練習(xí)。浮點(diǎn)數(shù)與字符串互轉(zhuǎn)、字符串拷貝、字符串比較、指針交換變量、指針優(yōu)先級(jí)、數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換、內(nèi)存拷貝
    的頭像 發(fā)表于 08-14 09:51 ?1807次閱讀

    C語(yǔ)言中指針及其相關(guān)知識(shí)

    數(shù)組在內(nèi)存中只是數(shù)組元素的簡(jiǎn)單排列,沒(méi)有開(kāi)始和結(jié)束標(biāo)志,在求數(shù)組的長(zhǎng)度時(shí)不能使用指針p來(lái)sizeof(p) / sizeof(int)這樣來(lái)求,因?yàn)?p 只是一個(gè)指向 int 類(lèi)型的指針,編譯器
    的頭像 發(fā)表于 10-14 16:23 ?1002次閱讀

    晶體知識(shí)——晶向指數(shù)和晶面指數(shù)

    "在材料科學(xué)中討論有關(guān)晶體的生長(zhǎng)、變形、相變及性能等問(wèn)題時(shí),常需涉及晶體中原子的位置、原子列的方向(稱(chēng)為晶向)和原子構(gòu)成的平面(稱(chēng)為晶面)。為了便于確定和區(qū)別晶體中不同方位的晶向和晶面,國(guó)際上通常用米勒指數(shù)(Miller indices)來(lái)統(tǒng)一標(biāo)定晶向指數(shù)和晶面
    的頭像 發(fā)表于 11-13 14:34 ?2.2w次閱讀
    晶體<b class='flag-5'>知識(shí)</b>——晶向<b class='flag-5'>指數(shù)</b>和晶面<b class='flag-5'>指數(shù)</b>

    母線保護(hù)相關(guān)知識(shí)分享

    母線保護(hù)相關(guān)知識(shí)分享
    的頭像 發(fā)表于 01-19 10:29 ?818次閱讀
    母線保護(hù)<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)</b>分享

    面試???1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開(kāi)發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場(chǎng)景,對(duì)于提升嵌入式程序的效率和質(zhì)量至關(guān)重要。一、
    的頭像 發(fā)表于 08-10 08:11 ?1459次閱讀
    面試常考+1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組