<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C語(yǔ)言你可能不知道的知識(shí),復(fù)合文字

          共 2161字,需瀏覽 5分鐘

           ·

          2021-03-04 04:21

          本文主要介紹一些C語(yǔ)言的一些偏門知識(shí)給大家,在這里簡(jiǎn)單的談一下C語(yǔ)言復(fù)合文字。需要讀者具備一定的C語(yǔ)言基礎(chǔ)。

          前言


          C99新增了復(fù)合文字(compound literal)。文字是非符號(hào)常量。例如:5是int類型的文字;82.3是float類型的文字等等。C99標(biāo)準(zhǔn)委員會(huì)認(rèn)為:如果又能夠表示數(shù)組和結(jié)構(gòu)內(nèi)容的復(fù)合文字,那么在編寫程序的時(shí)候要方便的多。

          數(shù)組復(fù)合文字的定義方式


          對(duì)于數(shù)組來(lái)說(shuō),復(fù)合文字看起來(lái)像是在數(shù)組的初始化列表前面加上用圓括號(hào)括起來(lái)的類型名。

          #include <stdio.h>int main(){  int iArray[]={10,20};             //普通數(shù)組  int &pArray=(int []){10,20};      //一個(gè)復(fù)合文字    //int &pArray=(int [2]){10,20};   與上文等效  return 0;}

           解析:

          • 類型名就是前面聲明中去掉iArray后剩余部分,即int[2]。

          • 初始化復(fù)合文字可省略數(shù)組大小,編譯器會(huì)自動(dòng)計(jì)算元素?cái)?shù)目

          • 復(fù)合文字沒(méi)名稱,必須創(chuàng)建時(shí)通過(guò)特定類型表示他們,便于使用

          復(fù)合文字充當(dāng)函數(shù)參數(shù)


          復(fù)合文字也可以做為實(shí)際參數(shù)被傳遞給帶有類型與之匹配的形式參量的函數(shù)。如下測(cè)試案例:

          #include <stdio.h>void print(int array[], int arrayNum) {  for (int i = 0; i < arrayNum; i++)   {    printf("%d\t", array[i]);  }}int main() {  print((int[]){1,2,3,4,5,6}, 6);  return 0;}

          測(cè)試截圖如下:

           此處第一個(gè)參數(shù)是包含6個(gè)元素的int型數(shù)組,同時(shí)也是首元素的地址(同數(shù)組名一樣)。這種給函數(shù)傳遞信息而不必先創(chuàng)建數(shù)組的做法,是復(fù)合常量的通常使用方法。

          二維數(shù)組或多維數(shù)組中復(fù)合文字

          這種技巧也可以用在處理二維數(shù)組或多維數(shù)組的函數(shù)中。例如,下面的代碼介紹如何創(chuàng)建一個(gè)二維int數(shù)組并保存其地址。

          #include <stdio.h>int main() {  int(*pArray)[4];//聲明一個(gè)數(shù)組指針  pArray = (int[2][4]){ {1,2,3,-9},{4,5,6,-8} };  return 0;}


          二維數(shù)組或多維數(shù)組中復(fù)合文字

          如下結(jié)構(gòu)體復(fù)合文字用法。

          #include <stdio.h>#include <string.h>struct MM {  char firstName[20];  char secondName[20];};void  getName(struct MM mm){  puts(strcat(mm.firstName, mm.secondName));}int main() {
          getName((struct MM) { "小", "可愛(ài)" }); //調(diào)用 return 0;}


          復(fù)合文字也可以取地址

          #include <stdio.h>#include <string.h>struct MM {  char firstName[20];  char secondName[20];};
          int main() {
          struct MM* pMM = &((struct MM) { "小", "可愛(ài)" }); //調(diào)用 printf("%s%s\n", pMM->firstName, pMM->secondName); return 0;}

          以上程序運(yùn)行結(jié)果打印:小可愛(ài)

          總結(jié)


          1. 當(dāng)一個(gè)類似結(jié)構(gòu)的東西需要臨時(shí)構(gòu)造的時(shí)候,可以用 (type_name){xx,xx,xx},而type_name就是之前定義的格式,去掉變量名(數(shù)組名)即可, 這種使用方法有點(diǎn)像 C++ 的構(gòu)造函數(shù)

          2. 復(fù)合文字就相當(dāng)于一個(gè)常量,只不過(guò)形式較為復(fù)雜而已,所有可以用常量的地方均可以用復(fù)合文字,例如,宏定義。

          3. 使用復(fù)合文字,在想傳一個(gè)“常量”時(shí),就不必先定義,再傳值了,比如傳一個(gè)常數(shù)坐標(biāo)(struct point{double x;double y;}),這樣就不用先定義一個(gè)結(jié)構(gòu)變量,再傳結(jié)構(gòu)體過(guò)去了,代碼更加簡(jiǎn)潔。

          4. 值得注意的是,復(fù)合文字具有左值語(yǔ)義。


          好了,復(fù)合文字就介紹到這里,大家可以先練習(xí)一下,喜歡的不如點(diǎn)個(gè)“在看”吧!可以的話給個(gè)點(diǎn)贊轉(zhuǎn)發(fā)也是OK的。

          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  337P亚洲精品色噜噜狠狠 | 亚洲精品国产精品国自产网站 | 亚洲成人高清 | 亚洲欧美三级专区 | 在线日韩在线 |