1. 程式人生 > >C語言學習記錄_2019.02.23

C語言學習記錄_2019.02.23

程序員 height 字符串長度 單個 成員 order 可能 [] 部分

  • char類型的輸出:

scanf(“%d”,&i);//i=49;

char x=i;

printf(“x=%d\n”,x);

printf(“x=’%c’\n”,c);

得到

x=49

x=’1’

即x=49的值,作為整數輸出的時候值為49,作為char類型變量的時候,值為1(1的ASCLL碼為49),得到‘1’==49,此時1為字符值,49為值;

  • scanf(“%d”,x);//從輸入裏面讀入整數;

scanf(”%c”,x);//從輸入裏面讀入字符值(註意為字符值而不是值);

  • 空格的ASCLL碼為32;
  • char類型,字符值的賦值:char = ‘A’;
  • 逃逸字符,用來表達無法打印出來的控制字符或特殊字符,由一個反斜杠”\”開頭,後面跟上另一個字符,這兩個字符組合起來,組成了一個字符,如”\““,可以打印出雙引號“ ”“;
  • 逃逸字符成員:

\b:回退一格,把下一個輸出回到上一個的位置上面去,a\bc--->c;類似Backspace;

\t:到下一個表格位;它不代表固定的字符的數量,而是代表固定的字符的位置,使對齊;類似Tab;

\n:換行;

\r:回車;

\’:單引號;

\”:雙引號;

\\:反斜杠本身;

  • char word[]={‘H’,’e’,’l’,’l’,’o’,’!’};//字符數組,6個單元;
  • char word[]={‘H’,’e’,’l’,’l’,’o’,’!’,’\0’};//字符串,7個單元,最後的0使得成為字符串,可以進行字符串的操作;
  • 字符串定義:以零結尾的一串字符,零表示字符串的結束,但它不是字符串的一部分;
  • 0和‘\0’是一樣的,但是和 ‘0’ 不同;
  • 字符串以數組的形式存在,以數組或指針的形式訪問;
  • 0(占4個字節),而 ‘\0’(占1個字節);
  • sting.h中有許多處理字符串的函數;
  • 字符串變量定義:

char *str = “Hello”;

char word[] = “Hello”;

char word[10] = “Hello”;//註意裏面有包含結尾的0,即字符串長度占了5+1個位置;

  • 由雙引號”“括起來的叫做字符串的字面量,或者叫做字符串的常量;
  • C語言會自動把相鄰的兩個字符串連接起來成為一個大的字符串;”a“”b“--

-->”ab“;(或者用反斜杠\來表示字符串為寫完)(because人的眼睛更容易、傾向於接收窄的內容)(程序員喜歡把屏幕轉過來)

  • 通過數組的方式可以用來遍歷字符串;
  • 字符指針類型的字符串,字符指針所指向的字符串的地址和字符指針本身的地址不同,字符指針所指向的字符串的地址位於代碼段,此段的代碼有只讀的保護功能,不能對其進行修改;如:char *s=”Hello”,S為const類型,只讀;
  • 用指針的方式定義字符串,則不能修改;//char *s=”Hello”;*s地址在別處;
  • 用數組的方式定義字符串,則可以修改;//char s[]=”Hello”;s[]地址在本地;
  • 數組則本地變量的空間是可以自動回收的,字符串則這個字符串不知道在哪裏;
  • 指針用處:

(1)用來處理參數,不可修改;

(2)動態分配空間,malloc得到字符串的空間;

  • 構造一個字符串:用數組;
  • 處理一個字符串:用指針;
  • 字符串可以表達為char*形式,char*不一定是字符串,也可能是指向單個字符的指針而已,只有它所指的地方結尾有0,才能說它指的是字符串;
  • 字符串賦值?

char *t = “title”;

char *s;

s= t;

並沒有產生新的字符串,只是讓指針s指向了t所指的字符串,對s的操作就是對t的操作;

技術分享圖片

  • 字符串的輸入輸出:

char string[8];

scanf(“%s”,string);//直到遇到空格、tab或回車為止;

printf(“%s”,string);

  • scanf是不安全的,因為不知道要讀入的內容的長度;
  • 安全的方式:char sting[8]; scanf(“%7s”,string);//告訴編譯器最多只能讀7個字符,超過7個則不要了;(8-1=7)
  • 常見錯誤:誤以為char*是字符串類型;(實際僅僅是定義了1個指針變量)沒有對指針進行初始化,char *string;所以不一定每次運行都出錯,可能換個電腦就出錯了,因為指針指向了有害的內存空間;
  • 本地變量沒有默認的初始值;
  • char buffer[100]=””;------>這是一個空的字符串,buffer[0]== ‘\0’;
  • char buffer[]=””;---------->這個數組的長度只有1,即buffer[0]=0;
  • #include<string.h>

//常用字符串函數

(1)size_t strlen(const char *s);----返回字符串的長度,不包括結尾的0;(const使函數不修改傳進去的數組)

(2)int strcmp(a,b);------比較兩個字符串,相等返回0,不相等則返回值的差值;

(3)strcpy(a,b);----------把字符串b的內容拷貝到a裏面去;

(4)strcat(a,b);----------把字符串b的內容拷貝到a的後面,接成1個長的字符串,返回a;(要求a的空間足夠大)(安全版本:strncat,strncmp,strncpy)

(5)strchr(const char *s,int c);----從左邊開始找c第一次出現的位置,返回指針;

(6)strrchr(const char*s,int c);----從右邊開始找c第一次出現的位置,返回指針;

  • 數組名字實際為數組的地址;因此a==b是false,因為兩個數組的地址不同;

C語言學習記錄_2019.02.23