色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

周立功教你學(xué)C語(yǔ)言編程:教你數(shù)組是如何保存指針的

AGk5_ZLG_zhiyua ? 來(lái)源:未知 ? 作者:電子大兵 ? 2017-08-31 10:09 ? 次閱讀

第一章為程序設(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ù)組的話,比使用switch語(yǔ)句效果更好。由此可見(jiàn),數(shù)據(jù)的隨機(jī)存儲(chǔ)會(huì)以兩種形式保存:存址和存值,存址方式詳見(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ú)論用戶傳進(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)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7618

    瀏覽量

    138660
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    483

    瀏覽量

    70706
  • C語(yǔ)言編程
    +關(guān)注

    關(guān)注

    6

    文章

    90

    瀏覽量

    21218
  • 周立功
    +關(guān)注

    關(guān)注

    38

    文章

    130

    瀏覽量

    37900
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    418

    瀏覽量

    26108

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    立功教你學(xué)C語(yǔ)言編程與程序設(shè)計(jì):這樣寫(xiě)函數(shù)指針數(shù)組最好用

    立功教授數(shù)年之心血之作《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》以及《面向AMetal框架與接口的編程(上)》,電子版已無(wú)償性分享到電子工程師與高校群體,在公眾號(hào)回復(fù)【編程】即可在線閱讀。
    的頭像 發(fā)表于 08-31 14:06 ?7092次閱讀
    <b class='flag-5'>周</b><b class='flag-5'>立功</b><b class='flag-5'>教你</b><b class='flag-5'>學(xué)</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編程</b>與程序設(shè)計(jì):這樣寫(xiě)函數(shù)<b class='flag-5'>指針</b><b class='flag-5'>數(shù)組</b>最好用

    所有C語(yǔ)言數(shù)組指針的知識(shí)都在這里了!|立功手把手教你學(xué)C語(yǔ)言編程

    當(dāng)數(shù)組作為函數(shù)的參數(shù)時(shí),C語(yǔ)言函數(shù)的所有參數(shù)必須在函數(shù)內(nèi)部聲明。但是,由于在函數(shù)內(nèi)部并沒(méi)有給數(shù)組分配新的存儲(chǔ)空間,因此一維數(shù)組的容量只在主程
    的頭像 發(fā)表于 09-01 09:28 ?8312次閱讀

    立功手把手教你學(xué)C語(yǔ)言編程:用數(shù)組,構(gòu)造一個(gè)雙重指針

    第一章為程序設(shè)計(jì)基礎(chǔ),本文為1.8.3 指針數(shù)組中的第二要點(diǎn):字符串與指針指針、第三要點(diǎn): 字符串與二維數(shù)組
    的頭像 發(fā)表于 09-04 14:15 ?6715次閱讀

    《手把手教你學(xué)單片機(jī)c語(yǔ)言》視頻教程

    `《手把手教你學(xué)單片機(jī)C語(yǔ)言》視頻教程電驢、優(yōu)酷、迅雷等下載地址《手把手教你學(xué)單片機(jī)
    發(fā)表于 10-26 14:14

    《手把手教你學(xué)CPLD/FPGA與單片機(jī)聯(lián)合設(shè)計(jì)》-興華

    。此外,為了幫助讀者掌握單片機(jī)與CPLD/FPGA的聯(lián)合設(shè)計(jì),還介紹了51單片機(jī)的基本知識(shí)及單片機(jī)c語(yǔ)言編程的基礎(chǔ)知識(shí),并通過(guò)實(shí)例設(shè)計(jì)進(jìn)行詳解。《手把手教你
    發(fā)表于 12-29 17:10

    《手把手教你學(xué)CPLD/FPGA與單片機(jī)聯(lián)合設(shè)計(jì)》-興華

    。此外,為了幫助讀者掌握單片機(jī)與CPLD/FPGA的聯(lián)合設(shè)計(jì),還介紹了51單片機(jī)的基本知識(shí)及單片機(jī)c語(yǔ)言編程的基礎(chǔ)知識(shí),并通過(guò)實(shí)例設(shè)計(jì)進(jìn)行詳解。《手把手教你
    發(fā)表于 01-06 17:21

    手把手教你學(xué)PIC單片機(jī)C語(yǔ)言

    手把手教你學(xué)PIC單片機(jī)C語(yǔ)言教程第1課- PICHL-K18- PICHL-K18慧凈電子--做人人都買(mǎi)得起的PPIICC單片機(jī)開(kāi)發(fā)板真誠(chéng)為你服務(wù),基于HHLL--KK1188 開(kāi)發(fā)
    發(fā)表于 07-15 09:23

    指針數(shù)組

    手把手教你C語(yǔ)言難點(diǎn)編程,很好的C語(yǔ)言編程基礎(chǔ)資料,
    發(fā)表于 03-25 15:30 ?1次下載

    吳堅(jiān)鴻教你學(xué)C語(yǔ)言

    《吳堅(jiān)鴻教你學(xué)C語(yǔ)言》這一套資料是我根據(jù)吳堅(jiān)鴻先生連載的“[51單片機(jī)] 從業(yè)將近十年!手把手教你單片機(jī)程序框架”,我覺(jué)得對(duì)一些初學(xué)者甚至是
    發(fā)表于 05-25 10:51 ?0次下載

    神2也教你學(xué)E語(yǔ)言

    語(yǔ)言是一門(mén)以中文作為程序代碼編程語(yǔ)言學(xué)習(xí)例程:易語(yǔ)言-神2也教你學(xué)E
    發(fā)表于 06-06 17:36 ?2次下載

    TinyM0_tools.pdf立功官方文件 教你怎么下載 很不錯(cuò)

    TinyM0_tools.pdf立功官方文件 教你怎么下載 很不錯(cuò)
    發(fā)表于 10-13 15:14 ?15次下載
    TinyM0_tools.pdf<b class='flag-5'>周</b><b class='flag-5'>立功</b>官方文件 <b class='flag-5'>教你</b>怎么下載 很不錯(cuò)

    手把手教你學(xué)LabVIEW視覺(jué)設(shè)計(jì)

    手把手教你學(xué)LabVIEW視覺(jué)設(shè)計(jì)手把手教你學(xué)LabVIEW視覺(jué)設(shè)計(jì)手把手教你學(xué)LabVIEW視
    發(fā)表于 03-06 01:41 ?3229次閱讀

    C語(yǔ)言指針數(shù)組的區(qū)別

    C語(yǔ)言教程中我們使用通過(guò)數(shù)組名通過(guò)偏移和指針偏移都可以遍歷數(shù)組,那么指針
    的頭像 發(fā)表于 07-18 16:29 ?2044次閱讀

    C語(yǔ)言進(jìn)階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?

    C語(yǔ)言進(jìn)階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?
    的頭像 發(fā)表于 08-31 13:21 ?1996次閱讀

    C語(yǔ)言中什么是指針數(shù)組

    C語(yǔ)言中一個(gè)數(shù)組,若其元素均為指針類(lèi)型數(shù)據(jù),稱為指針數(shù)組,也就是說(shuō),
    的頭像 發(fā)表于 03-10 15:26 ?1962次閱讀
    主站蜘蛛池模板: 国产精品AV视频一二三区 | 白丝制服被啪到喷水很黄很暴力 | 国产不卡无码高清视频 | 国产激情视频在线播放 | 国产成人综合高清在线观看 | 国产精品久久久久久52AVAV | 佐山爱巨大肥臀在线 | poronovideos动物狗猪 | 色戒无删减流畅完整版 | 偷拍亚洲制服另类无码专区 | 妖精视频在线观看高清 | 亚洲国产精品99久久久久久 | 肉动漫h黄动漫日本免费观看 | 男女牲交大战免费播放 | 2019一級特黃色毛片免費看 | 真实国产乱子伦精品一区二区三区 | 日产日韩亚洲欧美综合搜索 | 97亚洲狠狠色综合久久位 | 最新影音先锋av资源台 | 性色香蕉AV久久久天天网 | 日本无码毛片一区二区手机看 | 十次啦中文网 | 日本人吃奶玩奶虐乳 | 纯肉腐文高H总受男男 | 日本阿v片在线播放免费 | 京香在线播放 | 最近中文字幕完整版高清 | 午夜无码片在线观看影院 | 无码专区aaaaaa免费视频 | 白丝萝莉喷水 | 花蝴蝶在线观看免费8 | 日本欧美高清一区二区视频 | 国产成人a v在线影院 | 综合激情区视频一区视频二区 | 伊人网青青草 | 撕开美女的衣服2 | 国产午夜福利片 | 网友自拍偷拍 | 国产精品丰满人妻AV麻豆 | 亚洲视频欧美在线专区 | 色婷婷亚洲五月 |