那曲檬骨新材料有限公司

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

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

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

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

CHANBAEK ? 來源:落木青云 ? 作者:一顆糯米 ? 2023-04-08 11:28 ? 次閱讀

指針,初學(xué)者的夢(mèng)魘

對(duì)于初學(xué)者,在學(xué)習(xí)C語言的過程中每每提到指針都會(huì)讓無數(shù)人聞風(fēng)散膽吧。 因?yàn)樵谖覀儗W(xué)C語言的時(shí)候很多人(包括學(xué)長(zhǎng)或老師)可能都會(huì)告訴我們指針是C語言中最難的一部分,所以導(dǎo)致還沒開始接觸就勸退了一批人。 確實(shí),C語言的精華也在于此,這也是它之所以長(zhǎng)盛不衰的原因。 很多時(shí)候初學(xué)者之所以害怕使用指針是因?yàn)楹ε氯L試,其實(shí)如果在初學(xué)階段愿意去嘗試,敢于去修改bug,這時(shí)你就會(huì)發(fā)現(xiàn)指針學(xué)起來也簡(jiǎn)單多了。 你是不是因?yàn)楹ε赂慊?code>*(p+1)與*p+1,const int *pint *const p,**p,&p 等看起來就讓人蒙圈的變量、符號(hào),并且怎么記都似乎記不?。?那就應(yīng)該多去練習(xí)! 在之前的內(nèi)容中我也一直沒有寫這部分知識(shí)點(diǎn),因?yàn)槲易约河X得指針只要去使用它確實(shí)是沒難度的,另外一個(gè)原因是,這種沒難度似乎又只可意會(huì)不可言傳,自己總結(jié)出來的話總是沒有書籍中寫的清晰,每個(gè)人基礎(chǔ)不一樣同樣的話對(duì)不同人理解的程度又不同,所以這里還是希望初學(xué)者自己主動(dòng)把這塊硬骨頭啃下去,我就提點(diǎn)我自己認(rèn)證之內(nèi)的技巧供大家參考。

從定義出發(fā)去理解指針

這里對(duì)于指針的官方定義我就不做搬運(yùn)了,所有講解C語言的書本都少不了對(duì)指針的定義。 如果需要權(quán)威的說明可以查看《C Primer Plus》這本經(jīng)典書籍,其中還包含很多細(xì)節(jié)說明和舉例應(yīng)用,把它作為參考書再好不過了,我想我能描述出來的文字絕對(duì)比不上他書中寫的專業(yè)詳細(xì)。 指針最簡(jiǎn)單的概念就是:它是程序運(yùn)行過程中的一個(gè)內(nèi)存地址。 至于一些針對(duì)指針變量衍生出來的奇奇怪怪的的表達(dá)式實(shí)質(zhì)上就是運(yùn)算符優(yōu)先級(jí)與結(jié)合規(guī)律的基礎(chǔ)內(nèi)容。 如果區(qū)分不出來可以先復(fù)習(xí)運(yùn)算符部分知識(shí)。 我們都知道所有程序要跑起來都需要先加載到內(nèi)存中,程序運(yùn)行所需的數(shù)據(jù)都會(huì)根據(jù)程序指令進(jìn)行動(dòng)態(tài)分配。 很多朋友平時(shí)可能會(huì)說,哎呀,我的電腦手機(jī))又卡死啦,這時(shí)候很大可能性就是你的電腦或手機(jī)內(nèi)存被占滿了,而不是硬盤(存儲(chǔ)器)沒有足夠空間。 當(dāng)然如果你的磁盤空間不夠,然后運(yùn)行內(nèi)存也消耗過多那活該你的機(jī)器被卡。

學(xué)習(xí)時(shí)該怎么樣避免踩坑

還是哪句話,多練習(xí)把坑踩平自然而就不會(huì)再踩坑了,這肯定是一句廢話,學(xué)啥技術(shù)都可以這么說。 我的建議就是善用編譯器的調(diào)試功能printf()函數(shù),現(xiàn)在的編譯器功能都是越來越完善的,在初學(xué)階段使用程序調(diào)試功能可以讓你少走很多彎路,結(jié)合打斷點(diǎn)調(diào)試程序,單步執(zhí)行,觀察變量信息,哪里對(duì)點(diǎn)哪里,調(diào)多了你編程都會(huì)越來越有手感。 當(dāng)然,等你有一定經(jīng)驗(yàn)之后,在項(xiàng)目開發(fā)過程中還是希望你不要過多的依賴調(diào)試功能。 希望你對(duì)程序能夠熟練到通過看代碼就能發(fā)現(xiàn)邏輯是否正確。 至于初學(xué)者嘛,此時(shí)不用你還想啥時(shí)候用呢! 另外一個(gè)很關(guān)鍵的的技巧就是多打印信息,當(dāng)然也是要你到處都打印,一個(gè)變量都不落下的打印,如果你不想時(shí)不時(shí)的調(diào)試代碼,那就選擇這種方式,選擇在關(guān)鍵的地方對(duì)關(guān)鍵的數(shù)據(jù)進(jìn)行輸出,這樣你直接在控制或者串口助手中就能及時(shí)發(fā)現(xiàn)問題。 當(dāng)然采用這種方式在開發(fā)階段還是比較實(shí)用的,如果在巧妙的結(jié)合一些宏定義語句進(jìn)入功能調(diào)試的差不多之后就整體關(guān)閉輸出就好了,即使日后出現(xiàn)bug需要再調(diào)試處理起來也是非常方便。 所以以上兩種方法用于練習(xí)指針操作對(duì)初學(xué)者來說也是再好不過了,總之我曾經(jīng)就是這么練習(xí)的。

Keil中怎么了解指針

Keil和常用的C語言編譯器VS一樣具備調(diào)試功能,所以在你不會(huì)的時(shí)候也是可以采用調(diào)試的辦法仿真程序運(yùn)行結(jié)果來達(dá)到學(xué)習(xí)指針的目的。 下面舉一個(gè)簡(jiǎn)單的例子來說明。

隨便寫一個(gè)邏輯上跑得通的例子程序,編譯沒問題之后點(diǎn)擊debug即可。

#include  
#include  

unsigned int var1 = 0;
unsigned int idata var2[] = {1,2,3,4};
unsigned int data var3[] = {5,6,7};
unsigned int var4[] = {8,9};
unsigned int code var5[] = {10,11,12};

unsigned int data *var6;
unsigned int *var7;
unsigned int *var8;
unsigned int *var9;
unsigned int *var10;
//unsigned int *var11;

void main(void)
{
    var1 = 100;
    var2[0] = 101;   
    var3[0] = 102;
    var4[0] = 103;
//    va5[0] = 104;//這是一條錯(cuò)誤語句,存放于flash中的數(shù)據(jù)為只讀
    
    var6 = &var1;
    var7 = &var2;
    var8 = &var3;
    var9 = &var4;
    var10 = &var5;
}

在接下來彈出的窗口中就可以查看,哪些是指針的地址,以及其對(duì)應(yīng)的值,都可以看的一目了然。

圖片
匯編中內(nèi)存信息

這個(gè)辦法學(xué)起來難度不比單純的敲代碼更有意義嗎,即可以從底層了解單片機(jī)執(zhí)行原理又可以了解代碼的執(zhí)行過程,我感覺這應(yīng)該不會(huì)那么無聊吧。 單片機(jī)只是一種微型的計(jì)算機(jī)放大到開發(fā)計(jì)算機(jī)程序也是一樣的道理吧。

如果底層代碼理解起來有一定的難度也可以添加變量到觀察窗口進(jìn)行單步測(cè)試,這樣也一樣直觀明了。

圖片
變量觀察窗口

當(dāng)然還有很多方法進(jìn)行查看指針變量的變化過程,這里只是舉了一個(gè)非常簡(jiǎn)單的例子,初學(xué)者完全可以充分發(fā)揮自己的動(dòng)手能力探索自己的方法。 如果有自己想法歡迎留言或私信交流。

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

    關(guān)注

    8

    文章

    3055

    瀏覽量

    74334
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137726
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3796

    瀏覽量

    81418
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

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

    關(guān)注

    1

    文章

    481

    瀏覽量

    70611
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言基礎(chǔ)知識(shí)科普

    C語言是單片機(jī)開發(fā)中的必備基礎(chǔ)知識(shí),本文列舉了部分STM32學(xué)習(xí)中比較常見的一些C語言基礎(chǔ)知識(shí)
    發(fā)表于 07-21 10:58 ?1932次閱讀

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

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

    C語言指針講解,趕快收藏!

    指針對(duì)于C來說太重要。然而,想要全面理解指針,除了要對(duì)C語言有熟練的掌握外,還要有計(jì)算機(jī)硬件以及操作系統(tǒng)等方方面面的基本
    發(fā)表于 11-15 10:15 ?801次閱讀

    C語言入門教程-指針

    指針C語言中,指針被廣泛使用。所以要想完整地掌握C語言,您需要對(duì)
    發(fā)表于 07-29 11:30 ?680次閱讀

    C語言指針電子教程

    本資料是一份不錯(cuò)的關(guān)于C語言指針的電子教程,希望對(duì)大家有所幫助... 指針簡(jiǎn)介 指針C
    發(fā)表于 07-30 16:00 ?77次下載

    C語言指針函數(shù)和函數(shù)指針詳細(xì)介紹

    C語言指針函數(shù)和函數(shù)指針詳細(xì)介紹。。。。。。。
    發(fā)表于 03-04 15:27 ?5次下載

    c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別

     往往,我們一提到指針函數(shù)和函數(shù)指針的時(shí)候,就有很多人弄不懂。下面就由小編詳細(xì)為大家介紹C語言中函數(shù)指針
    發(fā)表于 11-16 15:18 ?3639次閱讀

    C語言的精髓——指針詳解

    C語言的精髓——指針詳解
    發(fā)表于 11-30 14:43 ?17次下載

    基于C語言中指針的基本用法解析

    C語言中其它的知識(shí)都學(xué)得可以,唯獨(dú)指針搞不懂。如果是這樣,我可以很負(fù)責(zé)的告訴你,對(duì)于這門編程語言,你等于是沒學(xué)。所以學(xué)好
    的頭像 發(fā)表于 01-09 15:12 ?4837次閱讀

    為什么C語言要引入指針_引入指針的好處是什么

    讓你知道什么是 C語言 指針,為什么用指針,從此不在害怕指針
    的頭像 發(fā)表于 07-28 10:12 ?2.2w次閱讀

    指針才是C語言的精髓

    文章目錄前言一、pandas是什么?二、使用步驟1.引入庫2.讀入數(shù)據(jù)總結(jié)前言指針對(duì)于很多初學(xué)C語言的人來說是一個(gè)十分復(fù)雜比較抽象的知識(shí),今天就帶大家一起來揭開
    發(fā)表于 12-09 13:06 ?14次下載
    <b class='flag-5'>指針</b>才是<b class='flag-5'>C</b><b class='flag-5'>語言</b>的精髓

    C語言-內(nèi)聯(lián)函數(shù)、遞歸函數(shù)、指針函數(shù)

    這篇文章介紹C語言的內(nèi)聯(lián)函數(shù)、遞歸函數(shù)、函數(shù)指針、指針函數(shù)、局部地址、const關(guān)鍵字、extern關(guān)鍵字等知識(shí)點(diǎn);這些
    的頭像 發(fā)表于 08-14 10:03 ?1733次閱讀

    C語言進(jìn)階】C語言指針的高階用法

    C語言進(jìn)階】C語言指針的高階用法
    的頭像 發(fā)表于 08-31 13:24 ?2409次閱讀

    C語言中的懸空指針和野指針是什么意思?

    提起C語言大部分開發(fā)者很自然就會(huì)想到指針二字,沒錯(cuò),作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個(gè)特有名詞
    的頭像 發(fā)表于 02-09 17:20 ?1148次閱讀

    詳解C語言指針底層基本原理

    說到指針,估計(jì)還是有很多小伙伴都還是云里霧里的,有點(diǎn)“知其然,而不知其所以然”。但是,不得不說,學(xué)了指針,C語言才能算是入門了。指針
    的頭像 發(fā)表于 04-06 10:43 ?1320次閱讀
    金百亿百家乐娱乐城| 百家乐官网小音箱| 德州扑克比赛| 六合彩特码开奖结果| 墨江| 百家乐官网扑克筹码| 百家乐园云顶娱乐主页| 百家乐官网怎么计算概率| 大发888网页在线游戏| 在线体育投注| 百家乐官网77scs官网| 全讯网qtqnet| 百家乐官网黄金城游戏大厅| 百家乐网络赌城| 天镇县| 真钱百家乐游戏排行| 总统娱乐城| 做生意摆放风水好吗| bet365提款要多久| 百家乐官网赌马| 杨公24山分金兼向吉凶| 新梦想百家乐的玩法技巧和规则| 太阳城集团| 巴黎百家乐官网地址| 24山择日财丁贵日| 名仕百家乐的玩法技巧和规则| 大发888官方 df888 gfxzylc8| 在线赌场| 谁会玩百家乐官网的玩法技巧和规则| 百家乐方案| 百家乐官网赢法口诀| 太阳城洋伞官网| 百家乐官网游戏免费下| 有百家乐的游戏平台| 百家乐官网在线作弊| 百家乐赌博走势图| 百家乐官网平台信誉排名| 真人百家乐游戏软件| 百家乐官网娱乐城备用网址| 百家乐开户过的路纸| 988百家乐官网娱乐|