精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

激情久久综合| 日韩av三区| 一个色综合av| 久久av二区| 夜夜躁狠狠躁日日躁av| 亚洲成av人电影| 日韩av一区在线| 午夜免费看毛片| 黄色成人在线网| 国产免费久久精品| 国产精品青青草| 国产精品成人无码| 国模吧视频一区| 自拍偷拍亚洲欧美| av网页在线观看| 99久久99九九99九九九| 婷婷成人激情在线网| 亚洲欧美日韩不卡一区二区三区| 成人小说亚洲一区二区三区| 水野朝阳av一区二区三区| 久久国产精品久久久久| 人妻av无码一区二区三区| 日韩三级不卡| 欧美精品一卡二卡| 国产成人无码a区在线观看视频| 国产69精品久久app免费版| 国产成人精品免费看| 国产精品久久久久久影视 | 国产欧美精品一区| 国产伦理久久久| 国产欧美一级片| 久久综合影视| 欧美在线一级va免费观看| 欧美亚洲日本在线| 久久综合电影| 在线亚洲欧美视频| 大黑人交xxx极品hd| 国产成人夜色高潮福利影视| 制服丝袜成人动漫| 91精品999| www.久久| 欧美日韩国产系列| 丁香婷婷激情网| 三上悠亚一区二区| 狠狠躁夜夜躁人人爽天天天天97 | 精品一区二区6| 综合干狼人综合首页| 亚洲国产精品成人一区二区| 欧美性猛交xx| 久久三级中文| 日韩一二三四区| 国产在线观看中文字幕| 国产激情一区| 日韩一区二区电影| 国产探花一区二区三区| 精品999日本久久久影院| 欧美放荡的少妇| 永久免费黄色片| 日本高清精品| 精品国产一区二区三区久久影院| 师生出轨h灌满了1v1| 欧美日韩黄网站| 欧美大片日本大片免费观看| aaaaaaaa毛片| 伊人精品综合| 国产视频精品自拍| 精品人妻互换一区二区三区| 精品产国自在拍| 一区二区在线视频播放| 久久久久麻豆v国产| 97精品视频在线看| 欧美大尺度激情区在线播放 | 在线日韩欧美| 全亚洲最色的网站在线观看| 一级片免费在线播放| 美女视频黄频大全不卡视频在线播放| 国产日韩av在线播放| av中文字幕在线免费观看| 顶级嫩模精品视频在线看| 激情视频一区二区| 黄色大片在线看| 中文字幕亚洲区| 久久香蕉视频网站| 蜜桃视频在线观看免费视频| 欧美午夜精品一区二区蜜桃| а 天堂 在线| 欧美毛片免费观看| 少妇精69xxtheporn| 91在线播放观看| 国产农村妇女精品一区二区| 国产精品综合久久久| 精品人妻少妇嫩草av无码专区| 成av人片一区二区| 亚洲一区二区在线免费观看| 在线heyzo| 在线精品视频免费播放| 亚洲欧美天堂在线| 全球av集中精品导航福利| 中文字幕在线精品| 国产精品第一页在线观看| 视频一区中文字幕国产| 99re国产| 在线免费看a| 亚洲成人高清在线| 亚洲久久中文字幕| 欧美电影免费网站| 久久在线精品视频| 国产视频1区2区| 国产成人精品三级麻豆| 欧美一区二区三区四区夜夜大片| 国产三区视频在线观看| 一本色道a无线码一区v| 第一页在线视频| 精品国产一区二区三区四区| 久久久噜噜噜久久久| 国产精品久久久久久无人区| 91麻豆成人久久精品二区三区| 中国一级大黄大黄大色毛片| 午夜精品成人av| 精品国产一区二区三区不卡 | 一区二区三区国产精品| 黄色av免费在线播放| 国产调教精品| 欧美—级a级欧美特级ar全黄| 伊人久久成人网| 久久久综合网站| 大陆av在线播放| 成人久久精品| 色爱精品视频一区| 潘金莲一级淫片aaaaaa播放| 成人免费福利片| 国产人妻人伦精品| 成人在线日韩| 日韩中文字幕免费看| 无码人妻丰满熟妇精品区| 波多野结衣一区二区三区| 亚洲第一综合网站| 看片一区二区| 日韩视频在线免费观看| 中文字幕永久在线观看| 国产欧美一区二区在线| 欧美牲交a欧美牲交aⅴ免费下载| 久久夜色电影| 久久久久久尹人网香蕉| 成人免费公开视频| 一级做a爱片久久| 好吊操视频这里只有精品| 亚州av乱码久久精品蜜桃| 国产在线精品一区免费香蕉 | 一区三区在线欧| 欧美最猛性xxxxx亚洲精品| 无码国产精品96久久久久| 亚洲国产成人av网| 欧美xxxxx精品| 国产亚洲毛片| 欧美亚洲另类久久综合| 日韩中文影院| 中文字幕一区二区三区电影| 夜夜躁很很躁日日躁麻豆| 日韩美女视频一区二区| 天天干天天色天天干| 中文字幕一区二区精品区| 91在线播放国产| 欧美xxxx少妇| 亚洲精品狠狠操| 香蕉影院在线观看| 国产欧美一区二区三区沐欲| 超碰在线公开97| 91精品国产成人观看| 99精彩视频| 97蜜桃久久| 亚洲黄色有码视频| 人人草在线观看| 中文字幕在线不卡一区| 在线视频日韩欧美| 亚洲高清久久| 亚洲成人a**址| 免费观看亚洲天堂| 91精品国产乱码久久久久久蜜臀| 国产一级片在线播放| 欧美喷水一区二区| 久久精品国产亚洲av麻豆色欲| 久久中文字幕电影| 久久精品视频在线观看免费| 国产在线日韩| 日本一区二区不卡高清更新| 日韩美女在线| 68精品久久久久久欧美| 成人动漫在线播放| 欧美成人三级电影在线| 无码任你躁久久久久久久| 亚洲免费资源在线播放| 久久久久久久久久久久久久久| 国产剧情av麻豆香蕉精品| 国产精品自拍片| 国产精品毛片久久| 精品国产一区二区三区四区精华| ww久久综合久中文字幕| 性色av一区二区三区红粉影视| 高清在线观看av| 欧美v日韩v国产v| 午夜一区二区三区四区| 一区二区三区在线免费| 亚洲ⅴ国产v天堂a无码二区| 成人动漫中文字幕| 激情在线观看视频| 久久电影一区| 秋霞无码一区二区| 在线成人直播| 婷婷久久伊人| 欧美调教视频| 高清一区二区三区视频| 精品亚洲a∨| 青青久久av北条麻妃黑人| 美洲精品一卡2卡三卡4卡四卡| 一区二区三区回区在观看免费视频 | 在线播放日韩| 自拍偷拍亚洲色图欧美| 怕怕欧美视频免费大全| 精品久久久久久中文字幕动漫 | 色综合桃花网| 九九热在线精品视频| 99reav在线| 亚洲欧美日韩中文在线制服| 可以免费观看的毛片| 日韩一区二区电影网| 国产又粗又猛又爽又黄视频| 欧美在线色视频| 亚洲天堂男人av| 欧美日韩国产一区二区| 欧美三级小视频| 亚洲欧美日韩小说| 北条麻妃在线观看视频| 久久精品一区八戒影视| 国产精品揄拍100视频| av一二三不卡影片| 在线中文字日产幕| 国产精品1区2区3区| 日韩欧美色视频| 极品少妇xxxx偷拍精品少妇| 亚洲久久中文字幕| 久99久精品视频免费观看| 国产精品拍拍拍| 蜜桃视频在线观看一区| 午夜免费福利在线| 日本 国产 欧美色综合| 污版视频在线观看| 久久99精品国产麻豆婷婷| 91女神在线观看| 精品一区二区三区在线观看 | 久久国产精品视频| 黄色在线免费看| 欧美精品性视频| 女同一区二区免费aⅴ| 久久久久久久一区二区| 日本а中文在线天堂| 国产成人久久久精品一区| 99riav视频一区二区| 91精品久久久久久久久| 精品中文视频| 国产在线一区二区三区欧美| 女同一区二区三区| 日本一区二区久久精品| 水蜜桃精品av一区二区| 男人天堂网站在线| 亚洲三级网站| 亚洲精品中文字幕无码蜜桃| 免费一级欧美片在线观看| 在线一区二区不卡| 成人免费视频视频| 亚洲av无码国产精品久久| 中文字幕国产精品一区二区| 国精品无码一区二区三区| 亚洲国产另类av| 无码人妻av一区二区三区波多野| 欧美精品 日韩| 成人小说亚洲一区二区三区| 亚洲另类激情图| 欧美jizzhd69巨大| 国内精品伊人久久| 国产精品字幕| 91成人免费观看| 亚洲69av| 一道本在线观看视频| 在线欧美不卡| 国产又大又黄又粗又爽| 国产99久久久国产精品| wwwwww日本| 综合欧美亚洲日本| 天天操夜夜操视频| 欧美高清一级片在线| 五月天婷婷视频| 久久精品国产欧美亚洲人人爽| 91高清视频在线观看| 国产精品美女久久| 一区二区三区自拍视频| 亚洲高清精品中出| 亚洲激情亚洲| 日本美女视频一区| 26uuu亚洲| 久久久久成人精品无码| 欧美伊人精品成人久久综合97| 后入内射欧美99二区视频| 永久免费精品影视网站| av影视在线| 成人在线播放av| av一区二区高清| 国产美女在线一区| 国产专区欧美精品| 国产女主播喷水高潮网红在线| 一区二区三区四区在线免费观看| 欧美人一级淫片a免费播放| 精品伦理精品一区| 国产在线高清视频| 国产精品扒开腿做爽爽爽视频| 国产三级精品三级在线观看国产| av动漫免费观看| 日本免费在线视频不卡一不卡二| 一级欧美一级日韩片| 亚洲男帅同性gay1069| 最近中文字幕免费在线观看| 国产丝袜一区二区三区免费视频| missav|免费高清av在线看| 成人久久一区二区| 日韩精品一区二区三区免费观看| 97xxxxx| 99国产精品99久久久久久| 精品欧美一区二区久久久久| 欧美情侣在线播放| 香蕉视频在线免费看| 国产精品7m视频| 国产在线观看91一区二区三区 | 亚洲欧美激情四射在线日| 成人女同在线观看| 99国产超薄丝袜足j在线观看 | 国产精品成人网| 免费黄色一级大片| 亚洲视频在线观看| 成人勉费视频| 美国av一区二区三区| 亚洲伦理精品| 天天躁日日躁狠狠躁av麻豆男男| 亚洲一级二级在线| 亚洲精品第五页| 欧美激情videos| jizz国产精品| 成人性生活视频免费看| 成人性视频网站| 中日韩精品视频在线观看| 亚洲成人精品在线| 性欧美又大又长又硬| 美日韩精品免费| 日本欧美在线看| 亚洲一二三四视频| 欧美日韩你懂得| 成年人网站在线| 国产精品久久久久久免费观看| 亚洲国产一区二区三区高清| 人人妻人人澡人人爽人人精品| 在线日韩一区二区| 中文字幕在线视频区| 国产日韩换脸av一区在线观看| 综合在线视频| 日本美女视频网站| 精品色蜜蜜精品视频在线观看| 久久av少妇| 成人免费大片黄在线播放| 欧美黄在线观看| 中出视频在线观看| 欧美综合视频在线观看| √新版天堂资源在线资源| 国产美女搞久久| 国语对白精品一区二区| 亚洲国产果冻传媒av在线观看| 色欧美片视频在线观看在线视频| 91欧美在线视频| 99久久无色码| 日日噜噜夜夜狠狠视频欧美人| 国产精品成人在线视频| 欧美成人三级在线| 午夜欧美巨大性欧美巨大| 中文精品一区二区三区| 成人在线视频首页| 日韩一级片中文字幕| 久久夜色精品国产亚洲aⅴ| 精品国内亚洲2022精品成人| 亚洲免费看av| 午夜精品久久久久| 91在线视频| 精品欧美一区二区精品久久| 美女一区二区久久| 日本三级中文字幕| 色先锋资源久久综合5566| 91精品久久久久久综合五月天| jizz欧美激情18| 一区二区免费视频| 国产高清视频免费最新在线| 97碰碰视频| 蜜臀av性久久久久蜜臀aⅴ | 久久人人精品|