<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          共用體union的妙用

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          結(jié)構(gòu)體struct是一個(gè)常用的數(shù)據(jù)類型,主要是將各種類型的數(shù)據(jù)打包成一個(gè)新的數(shù)據(jù)類型,在驅(qū)動(dòng)開(kāi)發(fā),寄存器的定義等方面都有比較大的優(yōu)勢(shì)。在使用的過(guò)程中需要注意空結(jié)構(gòu)體的大小以及對(duì)齊(8字節(jié))對(duì)數(shù)據(jù)大小的影響。具體的應(yīng)用就不說(shuō)了。另一個(gè)與struct非常相近的數(shù)據(jù)類型union則相對(duì)運(yùn)用的較少,但是如果理解了union的本質(zhì)就會(huì)發(fā)現(xiàn)該數(shù)據(jù)類型的好處。
          union主要是將各種類型的數(shù)據(jù)存放在一段固定的存儲(chǔ)器中,存儲(chǔ)器的大小由union中需要最大存儲(chǔ)器的數(shù)據(jù)類型決定。比如:
          union student
          {
          char ***;
          int age;
          long number;
          double score;
          };
          其中l(wèi)ong、double需要16個(gè)字節(jié),而char 只需要1個(gè)字節(jié),因此該共用體占用16個(gè)字節(jié)。union的關(guān)鍵是不同的數(shù)據(jù)類型共用存儲(chǔ)器。
          主要的運(yùn)用:
          1、確定CPU的模式:大端、小端模式確定
          大小端不同,則存儲(chǔ)的方式也存在差別,比如int需要4個(gè)字節(jié),而char只需要1個(gè)字節(jié),根據(jù)1個(gè)字節(jié)所在的具體位置即可判定CPU的模式
          union TestCPU
          {
          int i;
          char ch;
          };
          void testCPUMode(void)
          {
          union TestCPU Test;
          Test.i = 1;
          if(Test.ch == 1)
          {
          //這個(gè)CPU是小端模式
          }
          else
          {
          //這種情況下就是大端模式
          }
          }
          2、實(shí)現(xiàn)不同數(shù)據(jù)之間的類型轉(zhuǎn)換
          union Type
          {
          int i;
          char ch;
          long lint;
          ....
          };
          ...
          union Type type;
          這樣各種類型的數(shù)據(jù)共用存儲(chǔ)空間,很方便的實(shí)現(xiàn)了不同數(shù)據(jù)類型之間的轉(zhuǎn)換,不需要顯示的強(qiáng)制類型轉(zhuǎn)換。
          union相比struct更加的節(jié)省空間。
          3、寄存器的定義,實(shí)現(xiàn)整體的訪問(wèn)和單項(xiàng)的訪問(wèn)。
          struct register
          {char a;
          char b;
          char c;
          char d;
          };
          union Register
          {
          struct register;
          int whole;
          };
          這樣就能實(shí)現(xiàn)單項(xiàng)和整體的訪問(wèn),特別是引入位域操作等相關(guān)結(jié)構(gòu)以后,能夠?qū)崿F(xiàn)每一個(gè)bit的訪問(wèn)。
          其他的優(yōu)勢(shì)需要總結(jié),我暫時(shí)寫這三點(diǎn)了。


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();