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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C 语言里的字符串---字符数组

發(fā)布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C 语言里的字符串---字符数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//????? 實(shí)際上, c中并沒有字符串這種數(shù)據(jù)類型,? 也就是說c是沒有像java, .net等其他高級語言中常用的String類型.
?????
????? 首先要強(qiáng)調(diào):
????? a. c語言有無字符串????????? 有!
????? b. c語言有無字符串類型??? 無!
????? c. c語言字符串是否就是不是字符數(shù)組?? 是!
????? b. c語言字符串和字符數(shù)組是同一樣?xùn)|西??? 不是!

???? 實(shí)際上,? c語言中, 字符串是1個特殊的字符數(shù)組,? 特殊在什么地方? 就是字符數(shù)組最后1個元素可以是任意字符, 而字符串(屬于字符數(shù)組的最后1個元素是'\000',

????? 也就是說, c

1.字符類型

char 就是c的字符類型
定義1個字符變量,跟住賦值.
char a;
a='a';?? //這里只能用單引號,? 雙引號只能用于字符數(shù)組.

打印這個字符:
printf("char a is %c",a)
?
2.字符數(shù)組
?? 由名字得知, 字符數(shù)組實(shí)際上是1個數(shù)組,其性質(zhì)與數(shù)字型數(shù)組其實(shí)很類似的, 但是也有一些區(qū)別.

定義1個字符數(shù)組:
char c[5];? //:定義1個長度為5的字符數(shù)組,? 也就是有5個字符元素啦
char c[];?? // 錯誤,定義1個數(shù)組同時必須指定它的長度
賦值:

c[0]='a';c[1]='b';c[2]='c';c[3]='d';c[4]='e';??? //正確
c ="abcde";???? //錯誤
c={'a','b','c','d','e'}; //錯誤 因?yàn)閏數(shù)組定義時已經(jīng)設(shè)定了長度5, 而數(shù)組的長度一旦定義就不會改變, 所以c認(rèn)為這種賦值不合法,因?yàn)橛袡C(jī)會改變字符數(shù)組c的長度.

例子:

執(zhí)行結(jié)果:


可以見到, 字符數(shù)組定義后, 賦值相當(dāng)麻煩啊.? 而且不像數(shù)字型賦值, 不方便循環(huán)賦值..
所以一般在定義1個字符數(shù)組語句同時執(zhí)行賦值:
char c[]={'a','b','c','d','e'}? //? 正確
這樣的話, 字符數(shù)組c在定義的同時它的各個元素和長度也被定義為5了.

char c[5]={'a','b','c','d','e'} //正確
char c[4]= {'a','b','c','d','e'}? //錯誤, 制定長度為4, 但是賦予5個元素
char c[7]={'a','b','c','d','e'} //正確, 但是c[5]和c[6]這兩個元素都被設(shè)為NULL '\000'? 注意不是'0'啊

例子:
?
執(zhí)行結(jié)果:

可以見到d的長度是6, 但是d[5]的值顯示不出來,? 因?yàn)樯厦嬉呀?jīng)提過, 如果賦值的元素個數(shù)少于數(shù)組長度, 后面的元素會自動被賦值成'\0', 而'\0'是個空字符.

debug一下就可以看清楚了:
?
而這時字符數(shù)組d就是1個字符串了, 因?yàn)樗且?#39;\000'結(jié)尾的字符數(shù)組啊!



3.字符
???? 上面都提過很多次了,? 字符串是以'\000' 結(jié)尾的字符數(shù)組.

???? 定義1個字符串:
???? char c[]={'c','d','e','f','d','g','\000'}; // 長度為7
???? 而實(shí)際上還可以這樣定義:
???? char c[]="cdefdg"? // 系統(tǒng)會自動補(bǔ)1個Null字符'\000'到這個字符串的最后1個元素, 長度也是7
???? char c[7]="cdefdg" //正確? 這個是最常用的字符串變量賦值方法.

???? char c[6]="cdefdg"? //這個不是字符串, 長度不足以容納最后1個NULL字符'\000'
????
看個例子:
???執(zhí)行結(jié)果:
?

?

上面c 于d都是字符串, 因?yàn)樗麄兌际?#39;\000'結(jié)尾的, 而e是1個普通的字符數(shù)組:
函數(shù)sizeof返回的是數(shù)組長度, 它會將'\000'計算在內(nèi)
而函數(shù)strlen返回的是字符串長度, 它不會計算'\000'在內(nèi)? <string.h>

所以對于字符串來講 sizeof(d) =7 它有7個元素嘛,? 但是strlen長度只有6
而對于一般字符串(沒有'\000'字符, sizeof 和 strlen 返回的結(jié)果是一樣的)

現(xiàn)在我修改一下這個函數(shù), 令
字符串c的第4個字符c[4]='\000':
?

執(zhí)行結(jié)果:
?
可以見到 字符串c 居然顯示3個字符"cde", 了 strlen長度也只有3
因?yàn)閜rintf 函數(shù) 和strlen函數(shù)一樣, 都會從字符數(shù)組的頭1個元素往后面遍歷, 當(dāng)遇到'\000'時,就會認(rèn)為這是1個字符串, 而且會在這里結(jié)束.


4. 一些指針的意思:

??? ? ?? 定義1個字符串:
???????? char c[]="abcdef"; //
???????? 這樣c就是1個長度為7的字符數(shù)組(也是字符串)c,c的元素包括 'a','b','c','d','e','f','\000', 上面已經(jīng)解析過了.

???????? 而實(shí)際上, 跟int類型的數(shù)組名一樣, 這里的字符串(也是字符數(shù)組)名字c本身就是1個字符型指針,? 它指向數(shù)組c的一個的元素c[0]的地址.
???????? 也就是講:
???????? *c == c[0] = 'a'
???????? *(c+1) = c[1] = 'b'
???????? *(c+i) = c(i)?? //這個是經(jīng)典公式啊.

?? 也可以定義1個字符型指針*p
???????? char *p;
??
??? 給p賦值:
??? p=c;?? //因?yàn)閿?shù)組名c也是指針啊, 所以不需要取址符&,? p=&c;是錯誤的!

??? 這樣, p與c就是等價的(指向同1個地址
??? *p == c[0] = 'a' = p[0]
??? *(c+1) = c[1] = 'b' = p[1]
??? *(p+i) = p(i)=c(i) ? //這個是經(jīng)典公式啊.


有另1個種定義數(shù)組的方法:
?????? char *q = "abcdef"? ,
?????? 這樣指針q也是只向1個字符串. 用法跟上面指針p差不多

例子:


輸出:


可以見到:
1. 用數(shù)組c的長度是7(sizeof(c)), 而字符串長度是6(strlen).
??? 而用指針p去只想數(shù)組c, 求sizeof(p) 是多了1個元素的, 尾部多1個'\000',就是兩個'\000'結(jié)尾啦, 但是字符串長度是一樣的.

2. 可以見到 sizeof 和 strlen的參數(shù)實(shí)際上都是指針(c和p和q)都是指針.
所以在c語言中, 有很多函數(shù)的參數(shù)實(shí)際上都是指針, 這就是用地址傳遞產(chǎn)生了
例如
int strlen(char* p){???? //這里char* p表示p是1個字符型參數(shù),? 而定義1個字符串p使用char *p;的 注意區(qū)別~

}


見到輸出, p與q的部分是完全一樣的,
是否p與q的用法就完全一樣呢?

不是的
首先我定義字符串c時:
char c[]="abcdef"?

這個c是1個字符串變量
?
那么p=c;? p就指向1個字符串變量了

執(zhí)行
p[1] = 'k';
p[2] ='h';? //都是合法的, 因?yàn)樽兞康闹悼梢愿淖兟?br />
而定義1個字符指針q
char *p="abcdef"; 時

首先系統(tǒng)會定義1個字符串常量"abcdef",
然后指針p指向這個常量.

執(zhí)行
q[1]='k'; 是不合法的, 因?yàn)槌A康闹挡荒苄薷? 所以里面的元素的值也不允許的修改的.

所以要定義1個字符串, 而且打算修改時 不要用
?char *p="abcdef";?

這種方式, 但是用于常量時就推薦這種~
????????

?
???
????

?
?


?

總結(jié)

以上是生活随笔為你收集整理的C 语言里的字符串---字符数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。