日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

發布時間:2023/12/10 pytorch 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前有一篇文章是學習了字符和字符串的,可以與之結合學習:【C語言進階深度學習記錄】十二 C語言中的:字符和字符串

文章目錄

    • 1 字符串的概念
      • 1.1 字符串與字符數組
      • 1.2 字符數組與字符串代碼分析
    • 2 字符串字面量
      • 2.1 字符串字面量的本質的代碼分析
    • 3 字符串的長度
      • 3.1 strlen 的使用代碼分析
    • 4 總結

1 字符串的概念

字符串與字符數組很像,但是有差別,注意留意它們的差別。

  • 字符串是有序字符的集合
  • C語言中,沒有字符串的概念(沒有string這個關鍵字,C++中才有)
  • 但是C語言中,必須使用字符串
  • 所以C語言通常都是使用特殊的字符數組來模擬字符串
  • C語言中的字符串,是以’\0’ 結尾的字符數組。也就是說只有字符數組結尾是 ‘\0’ 該字符數組才是字符串,否則該字符數組就是普通的字符數組。這一點很重要!!!

1.1 字符串與字符數組

在C語言中,雙引號引用的單個或多個字符是一種特殊的字面量

  • 字面量存儲于程序的全局只讀存儲區
  • 它的本質是字符數組,編譯器自動在結尾加上 ‘\0’ 字符。注意,只有雙引號下的字面量,編譯器才會自動在后面加上’\0’字符。如果是一個普通的字符數組,是要自己在最后加的,否則無法成為字符串。

比如下面哪些是字符串的定義?

  • 第一個ca不是字符串,它是普通的字符數組。
  • sa 也是字符數組,但是由于它末尾加了’\0’,所以它也是一個字符串
  • ss是用雙引號初始化的,編譯器會默認在最后加上’\0’,所以ss也是字符串
  • 同理str也是字符串

1.2 字符數組與字符串代碼分析

  • 代碼: 30-1.c
#include <stdio.h>int main(){char ca[] = {'H', 'e', 'l', 'l', 'o'};char sa[] = {'H', 'e', 'l', 'l', 'o', '\0'};char ss[] = "Hello,World";char* str = "Hello,World";printf("%s\n", ca);printf("%s\n", sa);printf("%s\n", ss);printf("%s\n", str);return 0; }
  • 編譯運行結果如下:

  • 可以看出,只有第一個ca打印出來是亂碼,后面三個都是正常的。因為ca并不是字符串,我們以 ‘%s’ 打印的話,是類型不對應的,導致打印不對。(深層次原因的話是因為打印字符串都是遇到字符串的結尾’\0’就算打印一個字符串,但是ca中沒有’\0’ 字符)

2 字符串字面量

對于字符串的字面量,需要掌握幾點:

  • 字符串字面量的本質是一個數組
  • 字符串字面量可以看做常量指針,代表存儲該字符串的地址
  • 字符串字面量中的字符不可改變(位于全局只讀存儲區)
  • 字符串字面量至少包含一個字符(至少有一個’\0’)
  • 類似于這種 “Hello,world” 是一種無名的字符數組

    看一下下面三個表達式是正確的么?如果正確,值是多少?

    我們以代碼來驗證即可:

    2.1 字符串字面量的本質的代碼分析

    • 代碼:30-2.c
    #include <stdio.h>int main(){char a = "abc"[0]; //==>a='a'char b = *("123"+1); //==>b='2'char c = *""; //==>c='\0' 它的ASCII碼是 0printf("%c\n", a);printf("%c\n", b);printf("%d\n", c); printf("%s\n", "Hello");printf("%p\n", "Hello");char* p = "def";p+=1;// *p = 'g'; //error 字符串字面量不能更改return 0; }
    • 編譯運行上述代碼結果如下:

    可以看出:

  • 字符串字面量,的確是一個無名數組
  • 字符串字面量,可以代表它自身的內存地址
  • 字符串至少包含一個字符’\0’
  • 字符串字面量存儲于全局的只讀存儲區,不可修改
  • 3 字符串的長度

    這是一個比較重要的知識點:

    • 字符串的長度,是指第一個’\0’ 出現之前的所有字符的個數
    • 函數strlen用于返回字符串的長度

    如:

    3.1 strlen 的使用代碼分析

    • 代碼30-3.c
    #include <stdio.h> #include <string.h>int main(){char s[] = "Hello\0World";int i = 0;for(i=0; i<sizeof(s)/sizeof(char); i++){printf("%c\n",s[i]);}printf("sizeof(s) = %d\n", sizeof(s));printf("%s\n", s);printf("%d\n", strlen(s));printf("%d\n", strlen("123"));return 0; }
    • 編譯運行結果為:

    可以看到:

  • sizeof求解字符串的大小時,會將最后的隱藏字符’\0’ 也算進去
  • strlen求解字符長度時,是求解的字符串中第一個’\0’ 之前的所有字符的個數
  • 4 總結

    • C語言中可以通過字符數組模擬字符串
    • C語言中的字符串是以 ‘\0’ 作為結尾字符
    • 字符串字面量的本質是一個無名的字符數組
    • 字符串的相關函數都依賴于最后的結束符 ‘\0’

    總結

    以上是生活随笔為你收集整理的【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。