• <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>

            劉加加在成長(C++語言學習中)

            學習、工作、生活,這是三個問題。

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              38 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks

            字符串數組初始化:
            (1)char arr[10]="HI";

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

            如果數組的大小小于字符串的長度+1,程序在運行時可能要出現問題,所以應當確保數組的大小要大于字符串長度的大小+1;

            這段程序的字符串長度+1小于數組的大小:
            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'才能結束讀取,結果找遍整個數組沒有找到,只有繼續順著地址尋找,一直找到某個地址上的assii是0的,字符串才讀取完畢。所以本段程序在讀取完"hello jiajia"之后,后面可能還會有幾個隨機的字符,就是因為字符串終止于'\0'。

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

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


            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所指向的地址相同,這就說明它們指向的是內存里面同一個字符串,也就是說字符串本身并沒有復制,而是產生了一個指向同一個字符串的指針。這樣程序的效率會更加的高。如果需要復制字符串可以使用 strcpy() 或 strncpy()。

            posted on 2008-05-24 00:27 劉加加 閱讀(1865) 評論(0)  編輯 收藏 引用 所屬分類: 學習C語言
            久久久WWW成人| 狠狠综合久久综合中文88| 久久综合鬼色88久久精品综合自在自线噜噜 | 久久久久久国产精品美女| 蜜臀av性久久久久蜜臀aⅴ| 免费国产99久久久香蕉| 婷婷国产天堂久久综合五月| 久久人人妻人人爽人人爽| 99久久婷婷国产一区二区| 狠狠综合久久综合88亚洲| 亚洲国产精品久久| 久久精品亚洲精品国产色婷| 久久精品一区二区影院| 久久精品水蜜桃av综合天堂| 亚洲国产天堂久久久久久| 久久99精品综合国产首页| 色偷偷久久一区二区三区| 亚洲а∨天堂久久精品9966| 一级做a爱片久久毛片| 久久夜色精品国产网站| 亚洲欧美精品一区久久中文字幕| 青青草原综合久久| 久久精品国产精品亚洲毛片| 亚洲国产精品嫩草影院久久| 国产亚洲美女精品久久久| 国内精品久久九九国产精品| 色婷婷综合久久久久中文| 国产精品久久久久久久app | 国内精品伊人久久久影院 | 人妻少妇久久中文字幕一区二区| 久久久WWW免费人成精品| 女人香蕉久久**毛片精品| 久久精品国产99国产精品澳门| 日产精品久久久久久久性色| 亚洲国产精品高清久久久| 99久久国产综合精品女同图片| 久久免费视频1| 精品国产乱码久久久久软件| 久久精品国产亚洲av麻豆蜜芽| 一本大道久久东京热无码AV | 国产激情久久久久影院老熟女免费 |