一损俭、c語言沒有原生字符串類型
- 很多高級語言java c#就有字符串類型削葱,有個string來表示字符串料滥,用法和int很像咆繁,可用string s1="linux";來定義字符串的變量讳推。
- c語言沒有string類型,c語言中字符串是通過字符指針來間接實現的玩般。
二银觅、c語言使用指針來管理字符串
- c語言定義字符串方法:char *p=“l(fā)inux”;(可以說p是字符串,但實際上p只是應該字符指針坏为,本質上就是一個指針變量究驴,只是p指向了一個字符串的起始地址而已。
三匀伏、c語言中字符串的本質:指針指向頭洒忧、固定尾部 的地址相連 的一段內存
- 字符串就是一串字符。字符反映在現實中就是文字够颠、符號熙侍、數字等人用來表達的字符,反映在編程中字符就是字符類型的變量。c語言中使用ASCLL編碼對字符進行編碼蛉抓,編碼后可以用char型變量來表示一個字符庆尘。字符就是多個字符打包在一起共同組成巷送。
- 字符串在內存中其實就是多個字節(jié)連續(xù)分布構成(類似于數組驶忌,字符串和字符數組非常像)。
- c語言中字符串有3個核心要點:第一是用指針指向字符串的頭位岔;第二是固定尾部(字符串總是以\n來結尾);第三是組成字符串的各字符彼此地址相連堡牡。
- ‘\0’是一個ASCII字符抒抬,其實就是編碼為0的那個字符(真正的0晤柄,和數字0不同擦剑,數字0有它自己的ASCII編碼)(0等于'\0','0'等于48)芥颈。
- '\0'作為特殊的數字被字符串定義為結尾標志:副作用是字符串中無法包含‘\0'這個字符惠勒。(c語言中不可能存在包含’\0‘字符的字符串),這種思路叫做”魔數“’爬坑,正式內容中不能包含“魔數”作為內容。
四盾计、注意:指向字符串的指針和字符串本身是分開的兩個東西
- char *p="liunx"; p本身是一個字符指針售担,占4個字節(jié)署辉;“l(fā)inux”分配在代碼段族铆,占6個字節(jié)。實際上總共耗費了10個字節(jié)哭尝。這10個字節(jié)哥攘,4字節(jié)的指針p叫做字符串的指針用來指向字符串(理解為字符串的引子,本身不是字符串)材鹦;5字節(jié)字符內存逝淹,才是真正的字符串;最后一個用來存‘\0'的內存是字符串結尾標示(本質也不屬于字符串)栅葡。
五、存儲多個字符的兩種方式:字符串和字符數組
- 多個連續(xù)字符需要存儲莽红,實際上有兩種方式:字符串和字符數組妥畏。
#include <stdio.h>
int main(void)
{
char *p="linux"; //字符串
char a[]="linux; //字符數組
printf("p=%s.\n",p);
printf("a=%s.\n",a);
return 0;
}