C语言小白——数组与字符串
數(shù)組的概念:
數(shù)組是多個同種數(shù)據(jù)類型的數(shù)據(jù)的一個集合.數(shù)組的地址空間是連續(xù)的.
? ? |-------------------|
? ? | ?41 ?| ?2 ?| ?11 ?|
? ? |-------------------|
? ?0x00 ?0x04 ?0x08 ??
? ?地址本身是一個無符號整數(shù),數(shù)據(jù)長度4字節(jié).
? ?
存儲結構詳解 : 字長為4字節(jié)的計算機.
? ? ? ? ? ? ? ? <-----------------------32bit----------------------------------->?
? ? ? ? ? ? ? ? -----------------------------------------------------------------
? 0x00000008 ? ?| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |?
? ? ? ? ? ? ? ? -----------------------------------------------------------------
? 0x00000004 ? ?| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |?
? ? ? ? ? ? ? ? -----------------------------------------------------------------
? 0x00000000 ? ?| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |?
? ? ? ? ? ? ? ? -----------------------------------------------------------------
? ? ? ? ? ? ? ? ?1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8?
?? ??? ??? ??? ?|-----0x00------|-----0x01------|------0x02-----|------0x03-----|
?? ??? ??? ??? ?
數(shù)據(jù)對其 : 現(xiàn)代計算機中內存空間都是按照字節(jié)byte劃分的,理論上講對任何數(shù)據(jù)類型的變量的訪問可以從任何內
? ? ? ? ? ?存地址開始.但實際情況是,在訪問特定變量的時候經(jīng)常在特定的內存地址訪問.這就需要各類型數(shù)據(jù)按
?? ??? ? ? 照一定的規(guī)則在地址空間上排列,而不是順序的一個接一個排列,這就是數(shù)據(jù)對其.
?? ??? ? ? 數(shù)據(jù)對其是cpu體系結構的一部分,不是操作系統(tǒng)內存結構的一部分.數(shù)據(jù)對其有利于數(shù)據(jù)讀取的效率.
?? ??? ? ??
自然對其 : 如果一個變量的內存地址正好是它數(shù)據(jù)類型長度的整數(shù)倍,它就被稱作自然對齊.編寫可移植性高的代
? ? ? ? ? ?碼要避免對齊問題,保證所有數(shù)據(jù)類型都能自然對齊.?? ??? ?
----------------------------------------------------------------------------------------------------
一維數(shù)組:
定義 ? : [存儲類型] <數(shù)據(jù)類型> <數(shù)組名[n]>; ? ?//表示數(shù)組元素有n個.
初始化 : 數(shù)組如果定義后不初始化,那么數(shù)組中的值都是垃圾值.定義數(shù)組時我們可以對數(shù)組進行初始化.
? ? ? ? ?部分初始化 : int a[5] = {1,2,3}; ? ? ?//只初始化了a[0],a[1],a[2].
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?未初始化部分自動為0.
? ? ? ? ?全部初始化 : int a[5] = {0}; ? ? ? ? ?//全部初始化為零.
?? ??? ? ? ? ? ? ? ? ?int a[5] = {1,2,3,4,5}; ?? ??? ??
? ? ? ? ? ? ? ? ? ? ? int a[] = {1,2,3,4,5}; ? //可變數(shù)組,數(shù)組元素的個數(shù)由初始化值的個數(shù)決定.
舉例 ? : int a[8] = {21,52,6,8,3,9,45,234};
? ? ? ? ?|----------------------------------------------------|
? ? ? ? ?| ?21 ?| ?52 ?| ?6 ?| ?8 ?| ?3 ?| ?9 ?| ?45 ?| ?234 ?|?
? ? ? ? ?|----------------------------------------------------|
? ? ? ? 0x00 ?0x04 ? 0x08 ?0x0C ?0x11 ?0x15 ? 0x19 ? 0x2D ? 0x32?? ?
?? ??? ?
一維數(shù)組元素的賦值或引用:?
1.一維數(shù)組元素的表示方法是 : 數(shù)組名[下標]
2.數(shù)組元素的下標從0開始 : a[0] ? : 一維數(shù)組a的第1個元素.
? ? ? ? ? ? ? ? ? ? ? ? ? a[1] ? : 一維數(shù)組a的第2個元素.
?? ??? ??? ??? ??? ??? ? ?a[2] ? : 一維數(shù)組a的第3個元素.
?? ??? ??? ??? ??? ??? ? ?......
?? ??? ??? ??? ??? ??? ? ?a[n-1] : 一維數(shù)組a的第n個元素.
3.對數(shù)組元素賦值就是將某個數(shù)組存儲到某個數(shù)組元素對應的存儲空間內.
? 對數(shù)組元素的引用就是將數(shù)組元素對應的存儲空間內的數(shù)據(jù)取出來.
? 我們可以將每個數(shù)組元素看成一個相對獨立的變量.
4.對數(shù)組元素必須逐個賦值或者引用,也就是不可能一次性操作數(shù)組中多個或者所有的元素.
5.對數(shù)組元素賦值 ? : a[i] = 數(shù)據(jù);
6.對數(shù)組元素的引用 : 變量 = a[i];?
----------------------------------------------------------------------------------------------------
二維數(shù)組:
定義 ? : [存儲類型] <數(shù)據(jù)類型> <數(shù)組名[m][n]>; ? ? ? ?//表示有m行(m個一維數(shù)組)、n列(一維數(shù)組的長度).
初始化 : int a[2][4] = {0}; ? ? ? ? ? ? ? ? ? ? ? ? ? //全部初始化為0.
? ? ? ? ?int a[2][4] = {1,2,3,4,5,6,7,8}; ? ? ?//按行全部初始化.
? ? ? ? ?int a[][4] = {1,2,3,4,5}; ? ? ?? ??? ??? ? ? ? ?//按行部分初始化,行數(shù)是可變的.
? ? ? ? ?int a[2][4] = {{1,2,3,4},{1,2,3,4}}; ? ? ? ? //降維全部初始化,等價于按行全部初始化.
? ? ? ? ?int a[2][4] = {{1,2},{1,2,3}}; ? ? ? ? ? ? ? //降維部分初始化.
? ? ? ? ?int a[][4] = {{1,2,3,4},{5}}; ? ? ? ? ? ? ? ?//降維部分初始化.
舉例 ? : int a[3][8] = {{43,554,6,7,3,34,5,32},
? ? ? ? ? ? ? ? ? ? ? ? {23,43,5,6,7,4,54,456},
?? ??? ??? ??? ??? ??? ?{21,52,6,8,3,9,45,234}
?? ??? ??? ??? ??? ? ? };
?? ??? ?----------------------------------------------->?? ??? ??? ? ??
?? ??? ?0x3C ? 0x40 ? 0x44 ?0x48 ?0x4C ?0x50 ?0x54 ? 0x58 ??
? ? ? ? ?|----------------------------------------------------|
? ? 0x3C | ?21 ?| ?52 ?| ?6 ?| ?8 ?| ?3 ?| ?9 ?| ?45 ?| ?234 ?|?
? ? ? ? ?|----------------------------------------------------|
? ? 0x20 | ?23 ?| ?43 ?| ?5 ?| ?6 ?| ?7 ?| ?4 ?| ?54 ?| ?456 ?|?
? ? ? ? ?|----------------------------------------------------|
?? ?0x00 | ?43 ?| ?554 | ?6 ?| ?7 ?| ?3 ?| ?34 | ?5 ? | ?32 ? |?
? ? ? ? ?|----------------------------------------------------|
? ? ? ? 0x00 ?0x04 ? 0x08 ?0x0C ?0x10 ?0x14 ? 0x18 ? 0x1C ??
?? ? ? ?-----------------------------------------------> ?
二維數(shù)組元素的賦值或引用:?
1.二維數(shù)組元素的表示方法是 : 數(shù)組名[行下標][列下標]
2.數(shù)組元素的下標從0開始 : a[0][0] : 二維數(shù)組的第1行第1列.
? ? ? ? ? ? ? ? ? ? ? ? ? a[0][1] : 二維數(shù)組的第1行第2列.
?? ??? ??? ??? ??? ??? ? ?......
?? ??? ??? ??? ??? ??? ? ?a[0][n-1] : 二維數(shù)組的第1行第n列.
?? ??? ??? ??? ??? ??? ? ?a[1][0] : 二維數(shù)組的第2行第1列.
?? ??? ??? ??? ??? ??? ? ?a[2][1] : 二維數(shù)組的第3行第3列.
?? ??? ??? ??? ??? ??? ? ?......
? ? ? ? ? ? ? ? ? ? ? ? ? a[m-1][n-1] : 二維數(shù)組的第m行第n列.
3.對數(shù)組元素賦值就是將某個數(shù)組存儲到某個數(shù)組元素對應的存儲空間內.
? 對數(shù)組元素的引用就是將數(shù)組元素對應的存儲空間內的數(shù)據(jù)取出來.
? 我們可以將每個數(shù)組元素看成一個相對獨立的變量.
4.對數(shù)組元素必須逐個賦值或者引用,也就是不可能一次性操作數(shù)組中多個或者所有的元素.
5.對數(shù)組元素賦值 ?: a[i][j] = 數(shù)據(jù);
6.對數(shù)組元素的引用: 變量 = a[i][j];?
注: 對于二維數(shù)組,我們可以將數(shù)組名看作第一個一維數(shù)組的數(shù)組名.而從a[1]開始,a[i]可以表示對應的一維數(shù)組
? ? 數(shù)組名.
----------------------------------------------------------------------------------------------------
數(shù)組與字符串:
字符串: 由多個字符組成的集合就是字符串.
? ? ? ? 字符串一般表示方法是雙引號+字符串內容 : "ahdfsfjljgsdaljfd"
?? ??? ?所有的字符串都是以'\0'作為結束符的.比如,字符串"abc",他實際存儲的是字符'a','b','c','\0'.
一維數(shù)組與字符串 : 我們可以通過一維數(shù)組存儲一個字符串.
? ? ? ? ? ? ? ? ? ?比如通過一維數(shù)組存儲字符串"hello world!"
? ? ? ? ? ? ? ? ? ?char c[] = {'h','e','l','l','o',' ','w','o','r','l','d','\0'};
?? ??? ??? ??? ? ? char c[] = "hello world";
二維數(shù)組與字符串 : 我們可以通過二維數(shù)組存儲多個字符串.
? ? ? ? ? ? ? ? ? ?比如通過二維數(shù)組存儲字符串"hello"和"world".
?? ??? ??? ??? ? ? char c[][32] = {
?? ??? ??? ??? ? ? ? ? ? {'h','e','l','l','o','\0'},
?? ??? ??? ??? ??? ? ? ? {'w','o','r','l','d','\0'}
?? ??? ??? ??? ? ? ? ? ?};
----------------------------------------------------------------------------------------------------
多維數(shù)組 : 三維及三維以上的數(shù)組我們稱之為多維數(shù)組.
? 對于二維數(shù)組,我們可以理解為多個一維數(shù)組的集合;那么對于三維數(shù)組,我們就可以理解為多個二維數(shù)組的集合.
其它高維數(shù)組(三維以上),我們可以按照此規(guī)律類推.實際編程中,高維數(shù)組幾乎不會用到.
三維數(shù)組的定義 : [存儲類型] <數(shù)據(jù)類型> <數(shù)組名[z][m][n]>; ? ? ? ?
? ? ? ? ? ? ? ? ?z表示有多少個二維數(shù)組,m表示每個二維數(shù)組有m行(m個一維數(shù)組)、n列(一維數(shù)組的長度).
? ? ? ? ? ? ? ? ?三維數(shù)組的其它操作跟一,二維數(shù)組都是一樣的.
----------------------------------------------------------------------------------------------------
總結:
? ?以上是對數(shù)組與字符串的講解,非常實用于各位小白和剛剛入門學習C的朋友們,如果大家對C感興趣的話,可以進專門為小白提供學習場地的C語言學習群哦,群里面有免費的視頻資料,以及系統(tǒng)開發(fā)路線。各位感興趣的朋友可以加群:873521803進來學習哦!歡迎大家加入!
?
總結
以上是生活随笔為你收集整理的C语言小白——数组与字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十章触发器的创建与管理
- 下一篇: python http 返回json中文