精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關于結構體中指針的一些探討

開發 后端
在上篇文章中,有讀者對下列代碼有疑問,這位讀者意識到了name成員是個指針,在沒有對指針分配內存時,就直接復制“xiaoming”字符串,這是錯誤的。先說下結論,這個是沒有問題的,在下文我會詳細說明下。

01 起因

在上篇文章《STM32編程中枚舉和結構體的結合》中,有讀者對下列代碼有疑問

  1. typedef struct{ 
  2.   char *name;  //姓名 
  3.   int num;  //學號 
  4.   int age;  //年齡 
  5.   float score;  //成績 
  6. }stuff_s; 
  7. stuff_s xiaoming; 
  8. void xiaoming_inf_init() 
  9.   xiaoming.name = "xiaoming"
  10.   xiaoming.num = 1; 
  11.   xiaoming.age = 18.0; 
  12.   xiaoming.score = 100; 

留言到

很明顯,這位讀者意識到了name成員是個指針,在沒有對指針分配內存時,就直接復制“xiaoming”字符串,這是錯誤的。先說下結論,這個是沒有問題的,在下文我會詳細說明下。

02 解釋

首先,實踐是檢驗真理的唯一標準,我們直接在編譯器運行代碼即可,這里我使用的是IAR編譯,在VisualStudio中運行結果也是一樣的,這里我使用IAR為例

可以看到,運行沒有問題的,name成員被正常賦值。這里注意name指針指向的位置是0x8002A5C,這是在flash的地址范圍,也就是編譯器直接把“xiaoming”字符串放到了flash中,作為一個常量,然后把這個常量的指針賦給name指針,所以不用提前給name指針申請內存空間。關于STM32的內存分配,可以看之前推文《C語言在STM32中的內存分配》。這樣寫也是合法且正確的,當然我們最熟悉方式如下

  1. xiaoming.name = (char *)malloc(10); 
  2. memcpy(xiaoming.name,"xiaoming",8); 
  3. xiaoming.num = 1; 
  4. xiaoming.age = 18.0; 
  5. xiaoming.score = 100; 
  6. free(xiaoming.name); 

運行結果如下

可以看出,name指針是指向內存的,和剛開始的代碼是有區別的。那么像剛開始的寫法,如下

  1. xiaoming.name = "xiaoming"

編譯正常,運行正常,在使用中有什么限制嗎?答案是有的

  1. char test_char; 
  2. xiaoming.name = "xiaoming"
  3. test_char = xiaoming.name[2]; 

這樣寫是正確的,test_char可以被正確的賦值字符a;但如下寫法是錯誤的

  1. xiaoming.name = "xiaoming"
  2. xiaoming.name[2] = 'Q'

這樣寫可以編譯通過,執行的時候也不報錯,但是并不能達到修改第3個字符的目的。

本質上因為name指針指向的是Flash,可以通過上面的方法進行讀取操作,但是不能按上面方法進行寫入操作。

如果按下面的寫法,讀取和寫入的操作的操作都是沒有問題的,因為name指針指向的是內存,具有可讀可寫的屬性。

  1. xiaoming.name = (char *)malloc(10); 
  2. memcpy(xiaoming.name,"xiaoming",8); 
  3. xiaoming.num = 1; 
  4. xiaoming.age = 18.0; 
  5. xiaoming.score = 100; 
  6. free(xiaoming.name); 

所以日常代碼編寫中需要注意這些,我的觀點是:按照上述方法,先對指針申請內存,然后再賦值。

當然,萬事沒有絕對,需要視情況而定,下列情況,你也可以直接將字符串賦給指針

確認指針不會有寫入操作,只有讀操作,且你認為多加一句memcpy語句影響你的代碼運行速度了。

確認指針不會有寫入操作,只有讀操作,且系統沒有多余的內存給指針申請了。

03 const關鍵字

上文既然提到了只讀屬性,那么我們就再說一下const關鍵字。大家先看如下代碼操作

  1. typedef struct{ 
  2.   const char *name;  //姓名 
  3.   int num;  //學號 
  4.   int age;  //年齡 
  5.   float score;  //成績 
  6. }stuff_s; 
  7. stuff_s xiaoming; 
  8. int main(void) 
  9.   xiaoming.name = (char *)malloc(10); 
  10.   memcpy(xiaoming.name,"xiaoming",8); 
  11.   xiaoming.name[2] = 'Q'
  12.   xiaoming.num = 1; 
  13.   xiaoming.age = 18.0; 
  14.   xiaoming.score = 100; 
  15.   free(xiaoming.name); 

指針name前加了const關鍵字,這段代碼在IAR編譯器中是根本編譯不通過的。

原因很簡單,就是因為指針name具有const屬性,不能被寫入。

所以,在上一節最有一部分說到,當你確認指針不會有寫入操作,只有讀操作,你可以在這個指針定義前加一個const屬性,因為項目代碼不是你一個維護的,你設計時認為這個指針只有讀操作,就加const,這樣別人進行寫訪問時直接就會在IAR報錯,而不會將這個隱藏的隱患遺留在產品中。

當然,上文定義的const char *name;也是不規范的,當這個指針加了const,就應該在指針的名字中體現到,這個不同公司有不同的命名規范,每個人也有每個人的規范,這里不在演示了。

本文轉載自微信公眾號「知曉編程」

【編輯推薦】

 

責任編輯:姜華 來源: 知曉編程
相關推薦

2017-02-20 16:28:30

DCISDN-WAN傳輸網絡

2017-09-10 17:31:18

iOS渲染數據

2009-08-13 16:41:12

C#結構

2016-12-12 12:37:45

結構C代碼賦值

2009-03-13 09:31:03

.NET整合分布式應用

2011-07-13 09:13:56

Android設計

2009-11-25 09:23:47

PHP引用&符號

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java繼承

2012-09-25 10:03:56

JavaJava封面Java開發

2012-04-19 10:06:55

微軟Windows 8 E

2022-04-14 10:22:44

故事卡業務

2015-12-04 10:04:53

2020-09-28 06:45:42

故障復盤修復

2009-06-04 16:28:43

EJB常見問題

2011-03-11 09:27:11

Java性能監控

2017-12-21 07:54:07

2018-07-30 08:41:48

VueReact區別

2020-04-10 08:50:37

Shell腳本循環

2016-10-18 22:10:02

HTTP推送HTML
點贊
收藏

51CTO技術棧公眾號

久久午夜夜伦鲁鲁一区二区| 国产999在线| www日本在线观看| 嗯啊主人调教在线播放视频| 91久色porny| 国产精品久久久久9999| 欧美精品一级片| 日韩母乳在线| 欧洲精品在线观看| 亚洲爆乳无码精品aaa片蜜桃| 亚洲aⅴ在线观看| 蜜桃av一区二区三区| 欧美韩国理论所午夜片917电影| 一二三不卡视频| 国产精品99久久免费| 婷婷久久综合九色国产成人| 亚洲欧洲另类精品久久综合| 日本黄色免费视频| 激情偷乱视频一区二区三区| 欧美一二三视频| 强乱中文字幕av一区乱码| 国产精品一区二区99| 精品国产免费久久 | 亚洲免费网址| 久久成人综合视频| 超薄肉色丝袜一二三| 999久久精品| 欧美日韩中文字幕一区二区| 国产素人在线观看| 污视频在线免费观看网站| 中文文精品字幕一区二区| 国产一区二区三区四区五区在线| 国产女人18毛片水真多| 免费观看成人av| 日韩av免费看网站| 六月丁香在线视频| 激情文学一区| 欧美黑人极品猛少妇色xxxxx| 亚洲欧美综合7777色婷婷| 三级精品视频| 亚洲激情 国产| av天堂一区二区| 香蕉免费一区二区三区在线观看 | 国产91精品不卡视频| 久久免费视频精品| 欧美精品一级| 欧美另类交人妖| 久久精品黄色片| 中国成人一区| www.久久久久| 狠狠噜天天噜日日噜| 高清福利在线观看| 久久欧美中文字幕| 久久国产精品高清| 神马电影在线观看| 99re热这里只有精品免费视频| 国产传媒一区| 人妻精品一区二区三区| 不卡av免费在线观看| 国产在线一区二区三区欧美| 日韩中文字幕影院| 99久久精品国产导航| 国产综合动作在线观看| 天天综合在线视频| 2020国产精品自拍| 色噜噜一区二区| 亚洲麻豆精品| 亚洲色图欧美激情| 日本一级黄视频| 成年人视频免费在线播放| 亚洲成av人**亚洲成av**| 少妇一晚三次一区二区三区| 国产精品vvv| 亚洲国产中文字幕在线视频综合| 阿v天堂2018| 日本在线啊啊| 欧美亚日韩国产aⅴ精品中极品| av网站在线不卡| 国产美女精品视频免费播放软件| 日韩三级中文字幕| 特级西西人体wwwww| 精品久久一区| 亚洲精品在线网址| 91精品专区| 最新热久久免费视频| 真人做人试看60分钟免费| 欧美xxxx黑人又粗又长| 91美女高潮出水| 国产精品久久无码一三区| 国产日本欧洲亚洲| 91麻豆精品国产| 波多野结衣在线免费观看| 日韩 欧美 精品| 老鸭窝91久久精品色噜噜导演| 国产成人啪精品视频免费网| 91福利免费视频| 成人av午夜电影| 亚洲国产精品123| caopon在线免费视频| 午夜精品福利久久久| 亚洲欧美国产日韩综合| 国产成人精品亚洲线观看| 亚洲欧美中文字幕| 欧美日韩综合一区二区| 久久久久久黄| 99视频在线播放| lutube成人福利在线观看| 一区二区三区四区激情| 黄色三级视频片| japanese色系久久精品| 日韩在线免费视频| 欧美三级午夜理伦| 国产精品99久久久久久宅男| 欧美亚洲免费高清在线观看 | 久久精品国产一区二区电影| 国产精品18p| 韩国精品久久久| 日本精品一区二区| 精精国产xxxx视频在线播放| 欧美丰满高潮xxxx喷水动漫| 欧洲美一区二区三区亚洲| 在线欧美福利| 99久久国产免费免费| 一区二区三区视频在线观看视频| 欧美日韩国内自拍| 91精品啪在线观看国产| 久久精品免费一区二区三区| 国产精品扒开腿做爽爽爽男男| 少妇高潮久久久| 一区二区三区免费| av在线网站免费观看| 99精品网站| 国产日韩一区在线| 高h视频在线| 在线亚洲欧美专区二区| 国产精品无码一区二区三区免费 | 黄色av电影网站| 欧美激情aⅴ一区二区三区| 国产欧美精品一区二区| 国产福利电影在线| 欧美性一区二区| 亚洲v国产v欧美v久久久久久| 国产精品久久777777毛茸茸| 国产三级精品在线不卡| av有码在线观看| 亚洲成年人在线播放| 国产无码精品久久久| 成人免费视频视频在线观看免费| 日韩精品福利片午夜免费观看| 国产成年精品| 欧美日韩成人黄色| 囯产精品久久久久久| 亚洲高清免费观看| 天天插天天射天天干| 一区二区国产在线观看| 免费电影一区| 日韩欧美一区二区三区在线观看| 亚洲日本中文字幕| 又污又黄的网站| 亚洲丝袜自拍清纯另类| 8x8x成人免费视频| 欧美在线网站| 国产亚洲精品美女久久久m| 男女羞羞在线观看| 亚洲欧美日韩中文在线| 中文字幕一区二区三区四区视频 | 亚洲精品小视频在线观看| 国产精品xxxx喷水欧美| 久久精品亚洲乱码伦伦中文 | 久久久999国产精品| 国产v在线观看| 午夜精品福利久久久| 亚洲最大成人网站| 日韩av在线发布| 一本—道久久a久久精品蜜桃| 亚洲日本va午夜在线电影| 91极品视频在线| 香蕉视频在线看| 欧美xxx久久| 色一情一乱一伦| 日韩码欧中文字| 久久久高清视频| 日韩国产欧美在线视频| 男女激烈动态图| 人人精品亚洲| 国产欧美精品一区二区| free性m.freesex欧美| 国产一区二区黄| www.热久久| 在线观看www91| 久久久久久久久久综合| 国产亚洲成aⅴ人片在线观看| 久久精品一卡二卡| 国产日韩欧美一区| 永久免费精品视频网站| 色婷婷狠狠五月综合天色拍 | 中文字幕无码不卡免费视频| 亚欧美无遮挡hd高清在线视频| 鲁丝一区二区三区免费| 96视频在线观看欧美| 欧美一级高清免费| 99在线播放| 一区二区三区高清国产| 亚洲精品一区二区三区新线路| 在线观看国产91| 亚洲黄色一区二区| 亚洲综合在线观看视频| 精品伦精品一区二区三区视频密桃| 成人在线视频一区| 中国黄色片一级| 欧美综合国产| 国产精品一色哟哟| 亚洲女同一区| 亚洲欧美电影在线观看| 伊人久久大香线蕉无限次| 古典武侠综合av第一页| 先锋影音一区二区| 日韩av电影中文字幕| 波多野一区二区| 欧美成人黄色小视频| 91女主播在线观看| 亚洲精品综合久久中文字幕| 成人免费一级视频| 欧美一级午夜免费电影| 91国内精品视频| 欧美性猛交xxxx免费看久久久| 久久免费在线观看视频| 亚洲免费观看高清完整| 日韩av网站在线播放| 欧美激情在线观看视频免费| 国产三级视频网站| av一本久道久久综合久久鬼色| 中文字幕在线观看91| 国产精品一区二区久激情瑜伽 | 伊人伊成久久人综合网小说| 午夜黄色小视频| 亚洲第一区在线观看| 欧美自拍第一页| 亚洲第一av在线| 天堂在线观看免费视频| 亚洲黄页网在线观看| 手机亚洲第一页| 亚洲欧美激情四射在线日| 日本国产在线| 亚洲亚裔videos黑人hd| 春暖花开成人亚洲区| 一区二区三区 在线观看视| 电影在线高清| 日韩中文字幕免费视频| 日本不卡视频| 久久亚洲精品毛片| 99热国产在线| 69av在线视频| 成人sese在线| 国产精品久久久久久久7电影| 国内在线视频| 欧美精品videosex牲欧美| 黄页网站在线| 98精品国产自产在线观看| 亚洲欧美日韩精品一区| 黄色电影免费在线看| 亚洲黄在线观看| 水中色av综合| 国产亚洲欧洲高清| www.av在线播放| 久久精品久久久久久| 欧美性video| 欧美制服第一页| 日韩av一级| 成人免费在线视频网站| 中文字幕日韩在线| 久久99精品久久久久久三级 | 国产精品1区2区3区4区| 亚洲人成精品久久久久久| 免费毛片一区二区三区| 91成人免费在线| 国产精品视频一二区| 亚洲丁香婷深爱综合| 国模吧精品人体gogo| 久久影院资源网| 欧美xxxhd| 国产欧美精品xxxx另类| 国偷自产av一区二区三区| 欧美在线一区二区三区四区| 91成人国产| 日韩av黄色网址| 精品夜夜嗨av一区二区三区| youjizz.com日本| 国产欧美日韩中文久久| 久久久久无码国产精品| 在线一区二区三区做爰视频网站| 国产成人精品亚洲精品色欲| 亚洲九九九在线观看| dj大片免费在线观看| 日本精品久久久久影院| 国产美女视频一区二区| 欧美h视频在线| 欧美黄色大片网站| 中文字幕一区二区三区四区在线视频| 国产成人av一区二区三区在线| 白白色免费视频| 亚洲国产精品自拍| 亚洲中文字幕在线一区| 日韩精品免费一线在线观看| 麻豆网站在线看| 国产91色在线免费| 成人动漫视频| 亚洲欧美中文日韩在线v日本| 波多野结衣啪啪| 日韩美女一区二区三区四区| 国产在线视频你懂得| 欧美激情一区二区三级高清视频| 国产成+人+综合+亚洲欧美| 好看的日韩精品| 欧美三级在线| 国内自拍第二页| 国产欧美日本一区二区三区| 中文在线观看免费网站| 日韩一区二区三区在线观看 | 久久嫩草精品久久久精品| 韩国一级黄色录像| 欧美在线综合视频| 四虎影视2018在线播放alocalhost| 欧美大学生性色视频| 高清在线一区二区| 偷拍视频一区二区| 蜜乳av另类精品一区二区| 少妇被狂c下部羞羞漫画| 一区二区三区日韩| 99精品在线看| 大胆欧美人体视频| 日韩综合久久| 中文字幕剧情在线观看一区| 蜜臀国产一区二区三区在线播放| 蜜桃精品一区二区| 狠狠躁夜夜躁人人躁婷婷91| 国产小视频一区| 久久久亚洲精品视频| 91成人精品在线| www.国产在线视频| 高清av一区二区| 欧美人妻精品一区二区三区| 日韩一级高清毛片| caoporn免费在线视频| 99国精产品一二二线| 你懂的网址国产 欧美| 韩国三级hd中文字幕有哪些| 一区二区三区欧美亚洲| 亚洲国产999| 亚州精品天堂中文字幕| 日本中文字幕在线一区| 苍井空浴缸大战猛男120分钟| 久久久久9999亚洲精品| 中文字幕免费高清网站| 综合激情国产一区| 成人在线日韩| 男人添女荫道口喷水视频| caoporn国产精品| 欧美特黄aaaaaa| 一区二区在线视频| 999久久久国产999久久久| 亚洲精品国产suv一区88| 成人精品视频一区| 在线天堂中文字幕| 国产一区二区三区四区福利| 欧美美女被草| 97碰在线视频| 久久综合九色综合97婷婷女人| 天天干,天天干| 久久伊人精品视频| 九色丨蝌蚪丨成人| 中文字幕第21页| 亚洲欧美国产77777| 日本wwwxxxx| 国产精品久久久久9999| 午夜精品久久久久99热蜜桃导演 | 欧美一级黄色影院| 亚洲欧美日韩国产一区二区三区| 亚洲国产www| 日韩免费在线免费观看| 天堂美国久久| 免费看黄色aaaaaa 片| 欧美福利电影网| 妞干网免费在线视频| 亚洲一区二区三区精品动漫| 国产高清精品久久久久| 成年人免费高清视频| 日韩中文字幕在线观看| 欧美黄色录像| 在线视频一二区| 福利二区91精品bt7086| 黄色片网站在线| 欧美精品成人一区二区在线观看 | 真实乱视频国产免费观看| 欧美精品色综合| 秋霞伦理一区| 黄色录像特级片| 国产女主播在线一区二区| 午夜久久久久久久久久| 国产精品影院在线观看|