【C語言筆記】<十六>指針和字符串

通過數(shù)組保存字符串和通過指針保存字符串的區(qū)別
int main(int argc, const char * argv[]) {
    // 保存字符串
    char str[] = "lnj";
    printf("str = %s\n", str);
    str[0] = 'm';
    printf("str = %s\n", str);
    
    // 因為數(shù)組名就是數(shù)組的地址, 數(shù)組名保存的就是數(shù)組的第0個元素的地址,所以我們可以使用指針來保存字符串
    
    // 通過指針保存一個字符串, 其實就是保存的字符串第0個元素的地址
    char *str2 = "lmj";
    printf("str2 = %s\n", str2);
//    str2[0] = 'm';
    printf("str2 = %s\n", str2);
    
    
    // 通過數(shù)組保存字符串和通過指針保存字符串的區(qū)別
    // 如果通過數(shù)組來保存字符串, 那么字符串是一個變量 str  可以修改
    // 如果通過指針來保存字符串, 那么字符串是一個常量 str2 不能修該
    // 數(shù)組保存的字符串存儲在內(nèi)存的棧中, 而通過指針保存的字符串存儲在常量區(qū)
    // 存儲在棧中的變量有一個特點, 當(dāng)作用域結(jié)束系統(tǒng)會自動釋放該變量
    // 存儲在常量區(qū)中的值有一個特點, 不會被釋放, 而且多個相同的值對應(yīng)的地址相同
    
    char str3[] = "lnj";
    printf("str = %p\n", str);
    printf("str3 = %p\n", str3);
    
    char *str4 = "lmj";
    printf("str2 = %p\n", str2);
    printf("str4 = %p\n", str4);
    
    
    // 利用指針保存字符串的應(yīng)用場景
    for (int i = 0; i < 100; i++) {
        // 意味著會開辟100塊存儲空間來保存xmg這個字符串
        // 并且會釋放100次
//        char str5[] = "xmg";
        char *str6 = "xmg";
        printf("str5 = %s\n", str6);
    }
    
    /*
     保存字符串的兩種方式:
     char str[] = "lnj";
     存儲的位置: 棧
     特點: 相同的字符串會重復(fù)的分配存儲空間
           字符串可以修改
     
     char *str = "lnj"
     存儲的位置: 常量區(qū)
     特點: 相同的字符串不會重復(fù)的分配存儲空間
            字符串不可以修改
     */
    
    return 0;
}

注意點
int main(int argc, const char * argv[]) {
    /*
    // 指針沒有被初始化不能隨便使用, 野指針
    int *p;
    printf("*p = %i\n", *p);
     */
    /*
    char str[10];
    scanf("%s", str);
    printf("str = %s\n", str);
     */
    
    // 1.指針沒有初始化, 野指針
    char *str;
    scanf("%s", str);
    printf("str = %s\n", str);
    
    // 注意: 用指針來保存字符串不可以被修改
    // 指針沒有初始化不能隨便使用
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,614評論 3 44
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • 前言 最先接觸編程的知識是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識,c語言,java語言,單片機(jī)的匯編語言等;大學(xué)畢...
    oceanfive閱讀 3,395評論 0 7
  • 1、更新后,運行安裝的時候,出現(xiàn)下面錯誤 Session'demo':ErrorInstalling APKs 因...
    米有意思閱讀 244評論 0 0
  • 文/大白的芳芳 “你在害怕什么?”這是篤定的人問遲疑的人的一句話。 “你在害怕什么?”這是需要改變的人問自己的一句...
    大白的芳芳閱讀 600評論 0 0

友情鏈接更多精彩內(nèi)容