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