• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            劉加加在成長(zhǎng)(C++語(yǔ)言學(xué)習(xí)中)

            學(xué)習(xí)、工作、生活,這是三個(gè)問(wèn)題。

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              38 隨筆 :: 0 文章 :: 24 評(píng)論 :: 0 Trackbacks

            字符串?dāng)?shù)組初始化:
            (1)char arr[10]="HI";

            初始化字符串?dāng)?shù)組時(shí),編譯器自動(dòng)將字符串最后一個(gè)字符后面加上'\0',以表示字符串的結(jié)束。
            如果數(shù)組的大小大于字符串的長(zhǎng)度+1,那么把字符串結(jié)束后面的元素也都初始化為'\0';
            看這段程序:
            定義一個(gè)大小為12的字符串?dāng)?shù)組
            char str1[12]="jiajia";        
            讓一個(gè)char型的指針指向這個(gè)數(shù)組
                char *p1=str1;
            輸出這個(gè)字符串
                printf("%s\n\n",str1);
            利用指針輸出這個(gè)字符串?dāng)?shù)組中每個(gè)元素的字符、字符ascii值、字符存儲(chǔ)地址
                for(int i=0;i<12;i++)
                {
                    printf("%c:%d:%p\n",*p1,*p1,p1);
                    p1++;
                }
            可以看出,數(shù)組元素的后幾位都被初始化成了'\0';使用printf打印字符串?dāng)?shù)組時(shí),程序遇到第一個(gè)'\0'就結(jié)束對(duì)字符串的讀取。

            如果數(shù)組的大小小于字符串的長(zhǎng)度+1,程序在運(yùn)行時(shí)可能要出現(xiàn)問(wèn)題,所以應(yīng)當(dāng)確保數(shù)組的大小要大于字符串長(zhǎng)度的大小+1;

            這段程序的字符串長(zhǎng)度+1小于數(shù)組的大?。?br>char str2[12]="hello jiajia";
                char *p2=str2;

                printf("\n\n\n%s\n\n",str2);
               
                for(int i=0;i<28;i++)
                {
                    printf("%c:%d:%p\n",*p2,*p2,p2);
                    p2++;
                }

            使用printf打印字符串,程序需要找到'\0'才能結(jié)束讀取,結(jié)果找遍整個(gè)數(shù)組沒有找到,只有繼續(xù)順著地址尋找,一直找到某個(gè)地址上的assii是0的,字符串才讀取完畢。所以本段程序在讀取完"hello jiajia"之后,后面可能還會(huì)有幾個(gè)隨機(jī)的字符,就是因?yàn)樽址K止于'\0'。

            (2)char arr[]="Hello World!";
            這種初始化方法不用擔(dān)心數(shù)組大小過(guò)小的情況,數(shù)組的大小由編譯器決定。
            (3)char arr[]={'H','e','e','l','o',' ','W','o','r','l','d','\0'};
            同第二種方法結(jié)果相同,但顯然要麻煩許多。另外,' '代表空格,ascii值是32,'\0'代表字符串結(jié)束,ascii值是0;
            (4)char *p="Hello World";
            使用數(shù)組的方式初始化。同數(shù)組不同之處在于,p是一個(gè)變量,可以做遞增、遞減運(yùn)算,而arr是數(shù)組的首地址,是一個(gè)地址常量,不能做遞增、遞減運(yùn)算。

            char *name="liujiajia";
                name[0]='L';
                printf("\n%s\n",name);
            name[0]='L';這句代碼在最新的c99標(biāo)準(zhǔn)中會(huì)引發(fā)程序異常。需要注意。


            char *string="c programe";
                char *string2;    
                string2=string;    //將指針string的值賦給string2
                
                printf("\nstring=%s,&string=%p,string=%p\n",string,&string,string);
                printf("\nstring=%s,&string=%p,string=%p\n",string2,&string2,string2);

            上面這段程序最后顯示,指針string所指向的地址和指針string2所指向的地址相同,這就說(shuō)明它們指向的是內(nèi)存里面同一個(gè)字符串,也就是說(shuō)字符串本身并沒有復(fù)制,而是產(chǎn)生了一個(gè)指向同一個(gè)字符串的指針。這樣程序的效率會(huì)更加的高。如果需要復(fù)制字符串可以使用 strcpy() 或 strncpy()。

            posted on 2008-05-24 00:27 劉加加 閱讀(1862) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 學(xué)習(xí)C語(yǔ)言
            国产精品久久国产精麻豆99网站| 亚洲综合精品香蕉久久网97| 亚洲人成无码www久久久| 久久强奷乱码老熟女| 亚洲欧美另类日本久久国产真实乱对白| 亚洲欧美成人久久综合中文网 | 久久人人妻人人爽人人爽| 久久超乳爆乳中文字幕| 国产成人久久久精品二区三区 | 少妇人妻88久久中文字幕| 久久精品www人人爽人人| 一本久久a久久精品综合夜夜| 精品国产乱码久久久久久浪潮| 久久久久亚洲精品无码网址| 国内精品伊人久久久久777| 国产亚洲欧美精品久久久| 精品久久久久国产免费| 久久久久久国产精品美女 | 无码八A片人妻少妇久久| 久久亚洲私人国产精品| 精品人妻伦一二三区久久| 久久久亚洲裙底偷窥综合| 色综合色天天久久婷婷基地| 久久福利资源国产精品999| 国产精品一久久香蕉国产线看| 久久久99精品一区二区| 久久精品麻豆日日躁夜夜躁| 久久久精品日本一区二区三区| 久久婷婷激情综合色综合俺也去| 久久国产成人| 国产91色综合久久免费| 久久婷婷午色综合夜啪| 久久―日本道色综合久久| 久久精品日日躁夜夜躁欧美| 一本一道久久精品综合| 亚洲精品美女久久久久99| 久久国产视频网| 久久夜色精品国产亚洲| 欧美亚洲色综久久精品国产| 性欧美大战久久久久久久| 国产成人无码精品久久久久免费 |